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:

typescriptfunction 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:

typescriptfunction 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:

typescriptlet myStr: {str: string} = {str: 'abcde'};

Zavolejme funkci myFunc, nezapomeňme znovu uvést její typ a předejme proměnnou myStr jako parametr:

typescriptmyFunc <{str: string}> (myStr);
Задание 1

Na základě příkladu probraného v lekci nastavte funkci pro nalezení délky číselného pole.