Typové proměnné v TypeScriptu

Pro lepší pochopení konceptu generik vytvořme naši první funkci - funkci-identitu. Taková funkce vrací přesně to, co jí bylo předáno - se stejným typem.

Nejprve napišme varianty naší funkce samostatně.

Napišme funkci, která parametrem přijímá číslo a vrací číslo:

typescriptfunction func(data: number): number {
  return data;
}

Nyní napišme funkci, která parametrem přijímá řetězec a vrací řetězec:

typescriptfunction func(data: string): string {
  return data;
}

Nyní chceme, aby toto vše dělala jedna funkce. To znamená, že chceme provést zobecnění.

K tomu použijeme typovou proměnnou, která si uchovává typ dat. Taková proměnná se deklaruje v lomených závorkách před kulatými závorkami s parametry funkce. Pojďme deklarovat takovou proměnnou a dát jí jméno T (libovolné jméno je možné):

typescriptfunction func <T>(zde parametry) {
  return data;
}

Poté budeme mít k dispozici proměnnou T, kterou lze použít k uložení typu parametru a následně jeho určení jako návratového typu.

Určeme našemu parametru typ ve formě naší proměnné:

typescriptfunction func <T>(data: T) {
  return data;
}

Výsledkem bude, že parametr může být předán v libovolném typu a tento typ se uloží do naší proměnné T.

Nyní použijeme hodnotu proměnné T k určení výsledku funkce:

typescriptfunction func <T>(data: T): T {
  return data;
}

Nyní bude výsledkem, že typ výsledku funkce bude odvozen z typu parametru. Pojďme to ověřit.

Zavolejme funkci s číslem:

typescriptconsole.log( func(3) );   // vypíše 3

Zavolejme funkci s řetězcem:

typescriptconsole.log( func('x') ); // vypíše 'x'
Задание 1

Vytvořte funkci, která parametrem přijímá buď dvě čísla, nebo dva řetězce. Výsledkem funkce by měl být součet parametrů.