TypeScriptda umumlashmalarning cheklovlari

Oldingi darslarning birida biz o'ziga uzatilgan parametrning uzunligini chiqarishi kerak bo'lgan umumiy turdagi funktsiyani yaratgan edik. Biroq kompilyatsiya paytida bizga xatolik berildi, chunki barcha turlar uzunlikka ega bo'lmasligi mumkin:

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

O'sha paytda biz vaziyatni umumiy massiv turiga o'zgartirish orqali tuzatdik. Ammo TypeScriptda umumlashmalarning cheklovlarini yaratish imkoniyati mavjud. Buning uchun burchakli qavslar ichida, T o'zgaruvchisidan keyin extends kalit so'zini yozamiz. Undan keyin jingalak qavslar ichida string turidagi yangi str o'zgaruvchisini yozamiz. Funktsiyaning qolgan kodi o'zgarishsiz qoladi:

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

Ma'lum bo'lishicha, umumiy tur jingalak qavslarda ko'rsatilgan str o'zgaruvchisining turini meros qilib oladi. Endi bizning funktsiyamizning ishlashini tekshirib ko'ramiz va str turiga ishlovchi myStr o'zgaruvchisini yaratib, unga jingalak qavslar ichida qiymat beramiz:

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

Keling, myFunc funktsiyasini chaqiramiz, uning turini yana bir bor ko'rsatishni unutmaslik kerak va myStr o'zgaruvchisini parametr sifatida uzatamiz:

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

Darsda ko'rib chiqilgan misol asosida, raqamli massivning uzunligini topish uchun funktsiyani tayinlang.