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į:
function 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ų:
function 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:
let myStr: {str: string} = {str: 'abcde'};
Iškvieskime funkciją myFunc, ne
pamiršdami vėl nurodyti jos tipą ir perduokime
kintamąjį myStr kaip parametrą:
myFunc <{str: string}> (myStr);
Remdamiesi pamokoje nagrinėtu pavyzdžiu, apibrėžkite funkciją skaitinio masyvo ilgiui rasti.