Ograničenja generika u TypeScript-u

U jednoj od prethodnih lekcija kreirali smo funkciju generičkog tipa koja je trebalo da vrati dužinu prosleđenog parametra. Međutim, pri kompajliranju smo dobili grešku, pošto nemaju svi tipovi dužinu:

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

Tada smo situaciju ispravili tako što smo promenili generički tip u tip generičkog niza. Ali u TypeScript-u postoji mogućnost da se stvore ograničenja generika. Za to u uglastim zagradama, posle promenljive T pišemo ključnu reč extends. Posle nje u vitičastim zagradama upisujemo novu promenljivu str tipa string. Ostatak koda funkcije ostaje bez izmena:

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

Ispostavlja se da generički tip nasleđuje tip promenljive str, navedene u vitičastim zagradama. Sada hajde da proverimo rad naše funkcije i kreiramo promenljivu myStr, koja referiše na tip str, i dodelimo joj vrednost u vitičastim zagradama:

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

Hajde da pozovemo funkciju myFunc, ne zaboravljajući ponovo da navedemo njen tip i prosledimo promenljivu myStr kao parametar:

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

Na osnovu primera razmatranog u lekciji, postavite funkciju za pronalaženje dužine numeričkog niza.