Типовые переменные в TypeScript

Для лучшего понимания концепции дженериков давайте создадим нашу первую функцию - функцию-тождество. Такая функция возвращает точно то, что ей передали - с тем же типом.

Давайте для начала напишем варианты нашей функции по отдельности.

Напишем функцию, которая параметром принимает число и возвращает число:

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

Теперь напишем функцию, которая параметром принимает строку и возвращает строку:

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

Пусть теперь мы хотим сделать так, чтобы это все делала одна функция. To есть мы хотим выполнить обобщение.

Для этого мы используем типовую переменную, которая сохраняет в себя тип данных. Такая переменная объявляется в угловых скобках перед круглыми скобками с параметрами функции. Давайте объявим такую переменную, дав ей имя 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

Сделайте функцию, которая параметром принимает или два числа, или две строки. Своим результатом функция должна возвращать сумму параметров.