Brug af typeparametre i begrænsninger af generics i TypeScript
TypeScript har også mulighed for at deklarere en typeparameter, som vil være begrænset af en anden typeparameter. Dette er nødvendigt, når man skal kopiere egenskaber fra et objekt til et andet, samtidig med at man sikrer sig mod, at vi ikke overfører unødvendige egenskaber.
Lad os se på følgende eksempel. Lad os igen
vende tilbage til funktionen myFunc, som bestemmer
længden af en variabel:
function myFunc <T> (data: T): T {
console.log(data.length); // fejl
return data;
}
Men nu ønsker vi, at denne funktion
kun skal arbejde med de typer, som
har egenskaben length. For at gøre dette laver vi
et interface ILength, som vi giver
egenskaben length af typenummer:
interface ILength {
length: number;
}
Derefter i vores funktion angiver vi en generisk
type, som arver fra ILength
via nøgleordet extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Sådan ser vores fulde kode ud:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Lad os teste vores funktion og finde længden af en streng:
console.log(myFunc('abcde'));
Resultatet af den udførte kode:
5
'abcde'
Og lad os nu sende et array som parameter:
console.log(myFunc(['a', 'b', 'c']));
Resultatet af den udførte kode:
3
[ 'a', 'b', 'c' ]