Tüübi parameetrite kasutamine TypeScripti generikumite piirangutes
TypeScriptis on ka võimalik deklareerida üks tüübi parameeter, mis on piiratud teise tüübi parameetriga. See on vajalik, kui tuleb kopeerida omadusi ühest objektist teise, samal ajal kaitstes end selle eest, et me ei edastaks liigset omadust.
Vaatame järgmist näidet. Pöördume
tagasi funktsiooni myFunc juurde,
mis määrab muutuja pikkuse:
function myFunc <T> (data: T): T {
console.log(data.length); // viga
return data;
}
Kuid nüüd tahame, et see funktsioon
töötaks ainult nende tüüpidega, millel
on omadus length. Selleks loome
liidese ILength, millele määrame
omaduse length numbrilise tüübiga:
interface ILength {
length: number;
}
Järgmisena määrame oma funktsioonis
generiseeritud tüübi, mis pärineb
ILength-st kasutades võtmesõna
extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Meie täielik kood näeb välja selline:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Kontrollime oma funktsiooni tööd ja leiame stringi pikkuse:
console.log(myFunc('abcde'));
Koodi täitmise tulemus:
5
'abcde'
Ja nüüd edastame parameetrina massiivi:
console.log(myFunc(['a', 'b', 'c']));
Koodi täitmise tulemus:
3
[ 'a', 'b', 'c' ]