TypeScript-ում ընդհանրացումների սահմանափակումները

Նախորդ դասերից մեկում մենք ստեղծեցինք ընդհանրացված տիպի ֆունկցիա, որը պետք է արտածեր դրան փոխանցված պարամետրի երկարությունը: Սակայն կոմպիլյացիայի ժամանակ մեզ սխալ ցույց տրվեց, քանի որ ոչ բոլոր տիպերն են կարող ունենալ երկարություն:

typescriptfunction myFunc < T > (data: T): T {
  console.log(data.length); // սխալ
  return data;
}

Այդ դեպքում մենք շտկեցինք իրավիճակը՝ փոխելով ընդհանրացված տիպը ընդհանրացված զանգվածի տիպի: Բայց TypeScript-ում հնարավորություն կա ստեղծելու ընդհանրացումների սահմանափակումներ: Դրա համար անկյունային փակագծերում, T փոփոխականից հետո գրում ենք extends հիմնաբառը: Դրանից հետո ձևավոր փակագծերում գրում ենք նոր str տողային տիպի փոփոխական: Ֆունկցիայի մնացած կոդը կմնա անփոփոխ:

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

Ստացվում է, որ ընդհանրացված տիպը ժառանգում է str փոփոխականի տիպը, որը նշված է ձևավոր փակագծերում: Հիմա եկեք ստուգենք մեր ֆունկցիայի աշխատանքը և ստեղծենք myStr փոփոխականը, որը հղվում է str տիպին, և նշենք դրա արժեքը ձևավոր փակագծերում:

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

Եկեք կանչենք myFunc ֆունկցիան՝ կրկին չմոռանալով նշել դրա տիպը և փոխանցենք myStr փոփոխականը որպես պարամետր:

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

Դասում դիտարկված օրինակի հիման վրա սահմանեք թվային զանգվածի երկարությունը գտնելու ֆունկցիա: