Apribojimai generikuose TypeScript kalboje

Vienoje iš ankstesnių pamokų mes sukūrėme bendro tipo funkciją, kuri turėjo atspausdinti perduoto parametro ilgį. Tačiau kompiliavimo metu mums buvo pateikta klaida, nes ne visi tipai gali turėti ilgį:

typescriptfunction myFunc < T > (data: T): T {
  console.log(data.length); // klaida
  return data;
}

Tuo atveju mes ištaisėme situaciją pakeitę bendrą tipą į bendro masyvo tipą. Bet TypeScript kalboje yra galimybė sukurti generikų apribojimus. Norėdami tai padaryti, kampiniuose skliaustuose, po kintamojo T rašome raktinį žodį extends. Po jo garbanotuose skliaustuose užrašome naują kintamąjį str eilutės tipo. Likusios funkcijos kodas liks be pakeitimų:

typescriptfunction myFunc <T extends {str: string}> (data: T): void {
  console.log(data.str.length);
}

Pasirodo, kad bendras tipas paveldi kintamojo str tipą, nurodytą garbanotuose skliaustuose. Dabar patikrinkime mūsų funkcijos veikimą ir sukurkime kintamąjį myStr, nurodantį į tipą str, ir priskirkime jai reikšmę garbanotuose skliaustuose:

typescriptlet myStr: {str: string} = {str: 'abcde'};

Iškvieskime funkciją myFunc, ne pamiršdami vėl nurodyti jos tipą ir perduokime kintamąjį myStr kaip parametrą:

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

Remdamiesi pamokoje nagrinėtu pavyzdžiu, apibrėžkite funkciją skaitinio masyvo ilgiui rasti.