Тыпавыя зменныя ў 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

Зрабіце функцыю, якая параметрам прымае альбо два лікі, альбо два радкі. Сваім вынікам функцыя павінна вяртаць суму параметраў.