Kufizimet e Gjeneralizimeve në TypeScript
Në një nga mësimet e mëparshme krijuam një funksion të tipit të përgjithshëm, i cili duhej të nxirrte gjatësinë e parametrit të kaluar në të. Megjithatë, gjatë përpilimit na dha një gabim, pasi jo të gjitha llojet mund të kenë gjatësi:
function myFunc < T > (data: T): T {
console.log(data.length); // gabim
return data;
}
Në atë rast e rregulluam situatën, duke ndryshuar
llojin e përgjithshëm në llojin e vargut të përgjithshëm.
Por në TypeScript ekziston mundësia për të krijuar
kufizime të gjeneralizimeve. Për ta bërë këtë, në kllapat këndore,
pas ndryshores T shkruajmë
fjalën kyçe extends. Pas saj
në kllapa kaçurrel shkruajmë një
ndryshore të re str të llojit varg.
Kodi i mbetur i funksionit do të mbetet pa
ndryshime:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Del pra se lloji i përgjithshëm trashëgon llojin
e ndryshores str, të specifikuar në kllapat
kaçurrel. Tani le të kontrollojmë funksionimin
e funksionit tonë dhe të krijojmë një ndryshore myStr,
që i referohet llojit str, dhe t'i caktojmë
asaj një vlerë në kllapa kaçurrel:
let myStr: {str: string} = {str: 'abcde'};
Le të thërrasim funksionin myFunc, duke
u kujdesur që përsëri të tregojmë llojin e tij dhe të kalojmë
ndryshoren myStr si parametër:
myFunc <{str: string}> (myStr);
Bazuar në shembullin e shqyrtuar në mësim, caktoni funksionin për gjetjen e gjatësisë së një grupi numerik.