Utilizarea parametrilor tipici în constrângerile genericulor în TypeScript
De asemenea, în TypeScript există posibilitatea declarării unui parametru tipic, care va fi constrâns de un alt parametru tipic. Acest lucru este necesar atunci când trebuie să copiem proprietăți dintr-un obiect în altul, în același timp asigurându-ne că nu transmitem o proprietate în plus.
Să analizăm următorul exemplu. Să ne întoarcem
la funcția myFunc, care determină
lungimea unei variabile:
function myFunc <T> (data: T): T {
console.log(data.length); // eroare
return data;
}
Cu toate acestea, acum dorim ca această funcție
să funcționeze doar cu acele tipuri care
au proprietatea length. Pentru a face acest lucru, să creăm
interfața ILength, căreia îi vom atribui
proprietatea length de tip numeric:
interface ILength {
length: number;
}
Apoi, în funcția noastră, vom defini un tip generic
care moștenește de la ILength
prin cuvântul cheie extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Iată cum arată codul nostru complet:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Să verificăm funcționarea funcției noastre și să găsim lungimea unui șir de caractere:
console.log(myFunc('abcde'));
Rezultatul codului executat:
5
'abcde'
Și acum să transmitem un array ca parametru:
console.log(myFunc(['a', 'b', 'c']));
Rezultatul codului executat:
3
[ 'a', 'b', 'c' ]