Limitări ale genericității în TypeScript

Într-una din lecțiile anterioare am creat o funcție de tip generic care trebuia să afișeze lungimea parametrului transmis în ea. Cu toate acestea, la compilare am primit o eroare, deoarece nu toate tipurile pot avea lungime:

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

În acel caz, am remediat situația, schimbând tipul generic în tipul unui array generic. Dar în TypeScript există posibilitatea de a crea limitări pentru generice. Pentru a face acest lucru, în parantezele unghiulare, după variabila T scriem cuvântul cheie extends. După acesta în acolade scriem o nouă variabilă str de tip string. Restul codului funcției rămâne neschimbat:

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

Rezultă că tipul generic moștenește tipul variabilei str, specificată în acolade. Acum să verificăm funcționarea funcției noastre și să creăm o variabilă myStr, care face referire la tipul str, și să îi dăm o valoare în acolade:

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

Să apelăm funcția myFunc, fără a uita să indicăm din nou tipul ei și să transmitem variabila myStr ca parametru:

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

Pe baza exemplului analizat în lecție, definiți o funcție pentru găsirea lungimii unui array numeric.