Omezení generik v TypeScriptu
V jedné z předchozích lekcí jsme vytvářeli funkci generického typu, která měla vypisovat délku parametru předaného do ní. Při kompilaci nám však byla vypsána chyba, protože ne všechny typy mohou mít délku:
function myFunc < T > (data: T): T {
console.log(data.length); // chyba
return data;
}
V tom případě jsme situaci napravili změnou
generického typu na typ generického pole.
Ale v TypeScriptu existuje možnost vytvořit
omezení generik. K tomu v lomených závorkách,
za proměnnou T napíšeme
klíčové slovo extends. Za ním
do složených závorek zapíšeme novou
proměnnou str řetězcového typu.
Zbytek kódu funkce zůstane bez
změn:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Vychází to tak, že generický typ dědí typ
proměnné str, uvedené ve složených
závorkách. Nyní ověřme funkci
naší funkce a vytvořme proměnnou myStr,
odkazující na typ str, a nastavme
jí hodnotu ve složených závorkách:
let myStr: {str: string} = {str: 'abcde'};
Zavolejme funkci myFunc, nezapomeňme
znovu uvést její typ a předejme
proměnnou myStr jako parametr:
myFunc <{str: string}> (myStr);
Na základě příkladu probraného v lekci nastavte funkci pro nalezení délky číselného pole.