Ограничења генерика у 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

На основу примера разматраног у лекцији, задајте функцију за проналажење дужине нумеричког низа.