Típusparaméterek használata generikusok megkötéseiben TypeScript-ben
A TypeScript-ben lehetőség van arra is, hogy egy típusparamétert egy másik típusparaméterrel kötünk meg. Ez akkor szükséges, amikor tulajdonságokat kell másolnunk egy objektumból egy másikba, miközben meg akarunk óvni attól, hogy felesleges tulajdonságokat adunk át.
Nézzük a következő példát. Térjünk vissza
a myFunc függvényhez, amely
meghatározza egy változó hosszát:
function myFunc <T> (data: T): T {
console.log(data.length); // hiba
return data;
}
Most azonban azt szeretnénk, hogy ez a függvény
csak azokkal a típusokkal működjön, amelyeknek
van length tulajdonsága. Ehhez készítsünk
egy ILength interfészt, és adjunk meg
neki egy length numerikus típusú tulajdonságot:
interface ILength {
length: number;
}
Ezután a függvényünkben definiáljunk egy generikus
típust, amely a ILength-ből öröklődik
a extends kulcsszó segítségével:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Így néz ki a teljes kódunk:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Ellenőrizzük a függvényünk működését és keressük meg egy string hosszát:
console.log(myFunc('abcde'));
A kód végrehajtásának eredménye:
5
'abcde'
Most pedig adjunk át egy tömböt paraméterként:
console.log(myFunc(['a', 'b', 'c']));
A kód végrehajtásának eredménye:
3
[ 'a', 'b', 'c' ]