Bruk av typeparametere i begrensninger for generiske typer i TypeScript
TypeScript har også mulighet til deklarasjon av en typeparameter som vil være begrenset av en annen typeparameter. Dette er nødvendig når man må kopiere egenskaper fra ett objekt til et annet, samtidig som man forsikrer seg om at vi ikke overfører unødvendige egenskaper.
La oss se på følgende eksempel. Vi går tilbake
til funksjonen myFunc, som bestemmer
lengden på en variabel:
function myFunc <T> (data: T): T {
console.log(data.length); // feil
return data;
}
Men nå ønsker vi at denne funksjonen
skal fungere bare med de typene som
har egenskapen length. For å gjøre dette, lager vi
et grensesnitt ILength, og tilordner det
egenskapen length av numerisk type:
interface ILength {
length: number;
}
Deretter setter vi i vår funksjon en generisk
type, som arver fra ILength
via nøkkelordet extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Slik ser vår fulle kode ut:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
La oss teste funksjonen vår og finne lengden på en streng:
console.log(myFunc('abcde'));
Resultatet av den utførte koden:
5
'abcde'
La oss nå sende inn en array som parameter:
console.log(myFunc(['a', 'b', 'c']));
Resultatet av den utførte koden:
3
[ 'a', 'b', 'c' ]