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:

typescriptfunction 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:

typescriptfunction 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:

typescriptlet 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:

typescriptmyFunc <{str: string}> (myStr);
Задание 1

Bazuar në shembullin e shqyrtuar në mësim, caktoni funksionin për gjetjen e gjatësisë së një grupi numerik.