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:
function 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:
function 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:
let 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:
myFunc <{str: string}> (myStr);
Pe baza exemplului analizat în lecție, definiți o funcție pentru găsirea lungimii unui array numeric.