Gebruik van typeparameters in beperkingen van generieken in TypeScript
TypeScript biedt ook de mogelijkheid om één typeparameter te declareren die wordt beperkt door een ander type parameter. Dit is nodig wanneer we eigenschappen van het ene object naar het andere moeten kopiëren, terwijl we moeten voorkomen dat we een extra eigenschap doorgeven.
Laten we het volgende voorbeeld bekijken. Laten we terugkeren
naar de functie myFunc die de
lengte van een variabele bepaalt:
function myFunc <T> (data: T): T {
console.log(data.length); // fout
return data;
}
Nu willen we echter dat deze functie
alleen werkt met die typen
die de eigenschap length
hebben. Hiervoor maken we een
interface ILength, waaraan we de
eigenschap length van het type number toekennen:
interface ILength {
length: number;
}
Vervolgens specificeren we in onze functie een generiek
type dat overerft van ILength
via het sleutelwoord extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Zo ziet onze volledige code eruit:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Laten we de werking van onze functie testen en de lengte van een string vinden:
console.log(myFunc('abcde'));
Resultaat van de uitgevoerde code:
5
'abcde'
Laten we nu een array doorgeven als parameter:
console.log(myFunc(['a', 'b', 'c']));
Resultaat van de uitgevoerde code:
3
[ 'a', 'b', 'c' ]