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 айнымалысының түрін мұралайды. Енді функциямыздың жұмысын тексерейік және str түріне сілтеме жасайтын myStr айнымалысын жасап, оған бұйра жақшаларда мән берейік:

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

myFunc функциясын шапшаң шақырайық, оның түрін тағы да көрсетуді ұмытпаймыз және myStr айнымалысын параметр ретінде берейік:

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

Сабақта қарастырылған мысал негізінде сандық массивтің ұзындығын табу функциясын жазыңыз.