Používanie typových parametrov v obmedzeniach generík v TypeScript
TypeScript tiež umožňuje deklarovanie jedného typového parametra, ktorý bude obmedzený iným typovým parametrom. Toto je potrebné, keď je potrebné kopírovať vlastnosti z jedného objektu do iného, pričom sa chrániť pred tým, že neodovzdáme nadbytočnú vlastnosť.
Pozrime sa na nasledujúci príklad. Znova
sa vráťme k funkcii myFunc, ktorá definuje
dĺžku premennej:
function myFunc <T> (data: T): T {
console.log(data.length); // chyba
return data;
}
Avšak teraz chceme, aby táto funkcia
pracovala len s týmito typmi, ktoré
majú vlastnosť length. Na to urobme
rozhranie ILength, ktorému nastavme
vlastnosť length číselného typu:
interface ILength {
length: number;
}
Ďalej v našej funkcii nastavme generický
typ, ktorý dedí od ILength
prostredníctvom kľúčového slova extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Takto vyzerá náš úplný kód:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Skontrolujme činnosť našej funkcie a nájdime dĺžku reťazca:
console.log(myFunc('abcde'));
Výsledok vykonaného kódu:
5
'abcde'
A teraz odovzdajme do parametra pole:
console.log(myFunc(['a', 'b', 'c']));
Výsledok vykonaného kódu:
3
[ 'a', 'b', 'c' ]