Типске променљиве у TypeScript-у

За боље разумевање концепције генерика хајде да креирамо наш прву функцију - функцију идентитета. Таква функција врата управо оно што јој је прослеђено - са истим типом.

Хајде за почетак да напишемо варијанте наше функције појединачно.

Напишимо функцију која параметар прима број и враћа број:

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

Сада напишимо функцију која параметар прима стринг и враћа стринг:

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

Нека сада желимо да урадимо то да све то ради једна функција. Односно ми желимо да извршимо генерализацију.

За то користимо типску променљиву, која садржи у себи тип података. Таква променљива се декларише у угаоним заградама испред заобљених заграда са параметрима функције. Хајде да декларишемо такву променљиву, давши јој име T (може било које):

typescriptfunction func <T>(тут параметар) {
  return data;
}

После тога ћемо имати променљиву T, коју ћемо моћи користити да бисмо у њу сместили тип параметра, а затим га означили као повратни резултат.

Означимо нашем параметру тип у виду наше променљиве:

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

Испоставља се да параметар може бити прослеђен у било ком типу, и тај тип ће се сачувати у нашу променљиву T.

Сада искористимо вредност променљиве T како бисмо означили резултат функције:

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

Сада је резултат да ће тип резултата функције произилазити из типа параметра. Хајде да проверимо.

Позовимо функцију са бројем:

typescriptconsole.log( func(3) );   // исписаће 3

Позовимо функцију са стрингом:

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

Направите функцију, која параметрима прима или два броја, или два стринга. Својим резултатом функција мора да врати збир параметара.