TypeScript-ում ընդհանրացումների սահմանափակումները
Նախորդ դասերից մեկում մենք ստեղծեցինք ընդհանրացված տիպի ֆունկցիա, որը պետք է արտածեր դրան փոխանցված պարամետրի երկարությունը: Սակայն կոմպիլյացիայի ժամանակ մեզ սխալ ցույց տրվեց, քանի որ ոչ բոլոր տիպերն են կարող ունենալ երկարություն:
function myFunc < T > (data: T): T {
console.log(data.length); // սխալ
return data;
}
Այդ դեպքում մենք շտկեցինք իրավիճակը՝ փոխելով
ընդհանրացված տիպը ընդհանրացված զանգվածի տիպի:
Բայց TypeScript-ում հնարավորություն կա ստեղծելու
ընդհանրացումների սահմանափակումներ: Դրա համար անկյունային
փակագծերում, T փոփոխականից հետո գրում ենք
extends հիմնաբառը: Դրանից հետո
ձևավոր փակագծերում գրում ենք նոր
str տողային տիպի փոփոխական:
Ֆունկցիայի մնացած կոդը կմնա անփոփոխ:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Ստացվում է, որ ընդհանրացված տիպը ժառանգում է
str փոփոխականի տիպը, որը նշված է ձևավոր
փակագծերում: Հիմա եկեք ստուգենք մեր ֆունկցիայի աշխատանքը
և ստեղծենք myStr փոփոխականը,
որը հղվում է str տիպին, և նշենք
դրա արժեքը ձևավոր փակագծերում:
let myStr: {str: string} = {str: 'abcde'};
Եկեք կանչենք myFunc ֆունկցիան՝
կրկին չմոռանալով նշել դրա տիպը և փոխանցենք
myStr փոփոխականը որպես պարամետր:
myFunc <{str: string}> (myStr);
Դասում դիտարկված օրինակի հիման վրա սահմանեք թվային զանգվածի երկարությունը գտնելու ֆունկցիա: