Använda typparametrar i begränsningar av generics i TypeScript
TypeScript har också möjlighet att deklarera en typparameter som kommer att begränsas av en annan typ- parameter. Detta är nödvändigt när man behöver kopiera egenskaper från ett objekt till ett annat, samtidigt som man skyddar sig från att man inte skickar med en extra egenskap.
Låt oss titta på följande exempel. Vi återgår
till funktionen myFunc som bestämmer
längden på en variabel:
function myFunc <T> (data: T): T {
console.log(data.length); // fel
return data;
}
Men nu vill vi att denna funktion
ska fungera endast med de typer som
har egenskapen length. För att göra detta skapar vi
gränssnittet ILength, och tilldelar det
egenskapen length av numerisk typ:
interface ILength {
length: number;
}
Sedan i vår funktion sätter vi en generisk
typ som ärver från ILength
via nyckelordet extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Så här ser vår fullständiga kod ut:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Låt oss testa vår funktion och hitta längden på en sträng:
console.log(myFunc('abcde'));
Resultatet av den utförda koden:
5
'abcde'
Och låt oss nu skicka in en array som parameter:
console.log(myFunc(['a', 'b', 'c']));
Resultatet av den utförda koden:
3
[ 'a', 'b', 'c' ]