Типизация параметров и возвращаемого значения

Описываем «вход» и «выход» функции, чтобы компилятор проверял вызовы и тело.

Сигнатура функции в TypeScript задаёт типы параметров и тип возвращаемого значения: (a: number): string.

Типы параметров

Каждому параметру указывают тип через двоеточие. Теперь функцию нельзя вызвать с неподходящим аргументом:

function repeat(text: string, times: number): string {
  return text.repeat(times);
}

repeat("ab", 3);   // "ababab"
repeat("ab", "3"); // Ошибка: Argument of type 'string' is not assignable to parameter of type 'number'.

Это защищает оба конца: и вызывающий код (нельзя передать мусор), и тело функции (внутри times точно число, доступны числовые методы).

Тип возвращаемого значения

Тип после скобок описывает, что функция возвращает. Часто его можно не писать — TypeScript выведет сам. Но явное указание полезно: компилятор проверит, что тело действительно возвращает обещанное.

function getArea(width: number, height: number): number {
  return width * height; // ок: вернули число
}

function broken(x: number): number {
  // забыли return
}
// Ошибка: Function lacks ending return statement and return type does not include 'undefined'.

Без аннотации возврата вторая ошибка не всплыла бы здесь — она бы проявилась позже, там, где результатом попытались воспользоваться. Явный тип ловит проблему в самой функции.

Проверяемый пример

function celsiusToFahrenheit(c) {
  return c * 9 / 5 + 32;
}

console.log(celsiusToFahrenheit(0));
console.log(celsiusToFahrenheit(100));
console.log(celsiusToFahrenheit(-40));

Вывод:

32
212
-40

Тип void

Если функция ничего не возвращает (выполняет действие — печатает, сохраняет), её тип возврата — void:

function log(message: string): void {
  console.log("[LOG]", message);
  // ничего не возвращаем
}

void — это «функция отработала, но значения нет». Технически она возвращает undefined, но писать return не нужно. Попытка использовать результат такой функции бессмысленна:

const x = log("привет"); // x имеет тип void — использовать нечего

void против never

ТипСмысл
voidфункция завершилась, но значения нет
neverфункция вообще не завершается штатно (бросает/зацикливается)

Итог

  • Типы параметров защищают и вызов, и тело функции от неподходящих данных.
  • Явный тип возврата заставляет компилятор проверить, что функция реально его возвращает.
  • void — тип функций без возвращаемого значения (действие ради побочного эффекта).
Проверьте себя
1. Зачем явно указывать тип возвращаемого значения функции?
AЭто обязательное требование компилятора
BЧтобы компилятор проверил, что тело реально возвращает обещанный тип
CЧтобы функция работала быстрее
DЧтобы скрыть тело функции
2. Какой тип возврата у функции, которая только печатает сообщение и ничего не возвращает?
Anever
Bvoid
Cnull
Dany
3. Что произойдёт при вызове repeat("ab", "3"), если второй параметр имеет тип number?
AФункция выполнится, строка "3" приведётся к числу
BОшибка компиляции: строка не присваивается параметру типа number
CВернётся undefined
DПрограмма упадёт в рантайме
Поддержать проект