Tipinių parametrų naudojimas generikų apribojimuose TypeScript
TypeScript taip pat suteikia galimybę apibrėžti vieną tipinį parametrą, kuris bus apribotas kitu tipiniu parametru. Tai būtina, kai reikia nukopijuoti savybes iš vieno objekto į kita, tuo pačiu apsisaugant nuo perteklinių savybių perdavimo.
Pažvelkime į tokį pavyzdį. Vėl
grįžkime prie funkcijos myFunc, apibrėžiančios
kintamojo ilgį:
function myFunc <T> (data: T): T {
console.log(data.length); // klaida
return data;
}
Tačiau dabar norime, kad ši funkcija
veiktų tik su tais tipais, kurie
turi savybę length. Tam sukursime
interfeisą ILength, kuriam priskirsime
savybę length skaitinio tipo:
interface ILength {
length: number;
}
Tada mūsų funkcijoje nustatysime bendrinį
tipą, kuris paveldi iš ILength
naudojant raktinį žodį extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Štai kaip atrodo mūsų visas kodas:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Patikrinkime mūsų funkcijos veikimą ir rasime eilutės ilgį:
console.log(myFunc('abcde'));
Vykdymo rezultatas:
5
'abcde'
O dabar perduokime parametrą masyvą:
console.log(myFunc(['a', 'b', 'c']));
Vykdymo rezultatas:
3
[ 'a', 'b', 'c' ]