Generičke promenljive u TypeScript-u

Za bolje razumevanje koncepta generika hajde da napravimo našu prvu funkciju - identičnu funkciju. Takva funkcija vraća tačno ono što joj je prosleđeno - sa istim tipom.

Hajde za početak da napišemo varijante naše funkcije odvojeno.

Napišimo funkciju koja kao parametar prima broj i vraća broj:

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

Sada napišimo funkciju koja kao parametar prima string i vraća string:

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

Recimo sada da želimo da sve to radi jedna funkcija. To jest, želimo da izvršimo generalizaciju.

Za to koristimo generičku promenljivu, koja čuva u sebi tip podataka. Takva promenljiva se deklariše u uglastim zagradama ispred okruglih zagrada sa parametrima funkcije. Hajde da deklarišemo takvu promenljivu, dajući joj ime T (može bilo koje):

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

Nakon toga ćemo imati promenljivu T, koju možemo koristiti da u nju smestimo tip parametra, a zatim ga navedemo kao povratnu vrednost.

Navedimo tip našem parametru u obliku naše promenljive:

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

Ispostavlja se da parametar može biti prosleđen u bilo kom tipu, i taj tip će biti sačuvan u našu promenljivu T.

Sada iskoristimo vrednost promenljive T kao naznaku rezultata funkcije:

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

Sada će se ispostaviti da tip rezultata funkcije dolazi iz tipa parametra. Hajde da proverimo.

Pozovimo funkciju sa brojem:

typescriptconsole.log( func(3) );   // ispisuje 3

Pozovimo funkciju sa stringom:

typescriptconsole.log( func('x') ); // ispisuje 'x'
Задание 1

Napravite funkciju koja kao parametar prima ili dva broja, ili dva stringa. Svojim rezultatom funkcija treba da vrati zbir parametara.