Uporaba tipskih parametrov v omejitvah generikov v TypeScript
TypeScript omogoča tudi deklaracijo enega tipskega parametra, ki bo omejen z drugim tipskim parametrom. To je potrebno, ko je treba kopirati lastnosti iz enega objekta v drugega, pri tem pa se zavarovati, da ne posredujemo odvečnih lastnosti.
Oglejmo si naslednji primer. Vrnimo se
k funkciji myFunc, ki določa
dolžino spremenljivke:
function myFunc <T> (data: T): T {
console.log(data.length); // napaka
return data;
}
Vendar zdaj želimo, da ta funkcija
deluje samo s tistimi tipi, ki imajo
lastnost length. Za to naredimo
vmesnik ILength, ki mu določimo
lastnost length številskega tipa:
interface ILength {
length: number;
}
Nato v naši funkciji nastavimo generični
tip, ki podeduje od ILength
prek ključne besede extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Tako izgleda naša polna koda:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Preverimo delovanje naše funkcije in poiščimo dolžino niza:
console.log(myFunc('abcde'));
Rezultat izvedene kode:
5
'abcde'
In zdaj posredujmo polje v parameter:
console.log(myFunc(['a', 'b', 'c']));
Rezultat izvedene kode:
3
[ 'a', 'b', 'c' ]