Obmedzenia generík v TypeScript
V jednej z predchádzajúcich lekcií sme vytvorili funkciu generického typu, ktorá mala vypísať dĺžku parametra, ktorý bol do nej odovzdaný. Avšak po kompilácii sme dostali chybu, pretože nie všetky typy môžu mať dĺžku:
function myFunc < T > (data: T): T {
console.log(data.length); // chyba
return data;
}
V tom prípade sme situáciu vyriešili zmenou
generického typu na typ generického poľa.
Ale v TypeScript existuje možnosť vytvoriť
obmedzenia generík. Na to v lomených zátvorkách, za premennou T napíšeme
kľúčové slovo extends. Po ňom
v zložených zátvorkách zapíšeme novú
premennú str reťazcového typu.
Zvyšok kódu funkcie zostane bez
zmien:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Vychádza, že generický typ dedí typ
premennej str, uvedenej v zložených
zátvorkách. Teraz skontrolujme fungovanie
našej funkcie a vytvorme premennú myStr,
odkazujúcu sa na typ str, a nastavme
jej hodnotu v zložených zátvorkách:
let myStr: {str: string} = {str: 'abcde'};
Zavolajme funkciu myFunc, nezabudnime
znovu uviesť jej typ a odovzdajme
premennú myStr ako parameter:
myFunc <{str: string}> (myStr);
Na základe príkladu, zváženého v lekcii, nastavte funkciu pre zistenie dĺžky číselného poľa.