Типизация функций

Типизация функций в TypeScript позволяет чётко определить, какие аргументы принимает функция и какое значение она возвращает. Это помогает избежать ошибок при вызове и упрощает поддержку кода.


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

При объявлении функции после каждого параметра указывается его тип. После закрывающей скобки параметров — тип возвращаемого значения.

function greet(name: string, age: number): string {
  return `Привет, ${name}! Тебе ${age} лет.`;
}

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

function logMessage(message: string): void {
  console.log(message);
}

Опциональные параметры

Параметр можно сделать необязательным, добавив знак вопроса ? после его имени. Такой параметр может отсутствовать при вызове функции.

function introduce(name: string, title?: string): string {
  if (title) {
    return `${name}, ${title}`;
  }
  return name;
}

introduce("Анна");            // допустимо
introduce("Борис", "инженер"); // допустимо

Важно: опциональные параметры должны идти после обязательных.


Значения по умолчанию

TypeScript позволяет задавать значения по умолчанию для параметров. В этом случае аннотация типа часто не требуется — компилятор выводит его автоматически.

function createGreeting(name: string, greeting: string = "Привет"): string {
  return `${greeting}, ${name}!`;
}

Несмотря на наличие значения по умолчанию, тип параметра всё равно должен соответствовать возможным вызовам. Если вы передадите значение другого типа, возникнет ошибка.

Примечание: наличие значения по умолчанию делает параметр необязательным, даже без ?.


Типизация стрелочных функций

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

const multiply = (a: number, b: number): number => a * b;

// Или с явным типом переменной:
const divide: (x: number, y: number) => number = (x, y) => x / y;

Последний вариант редко используется напрямую, но полезен при описании типов коллбэков или пропсов.


Функции как типы

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

type EventHandler = (event: string, payload: unknown) => void;

const handleEvent: EventHandler = (event, data) => {
  console.log(`Событие: ${event}`, data);
};

Это особенно важно в React, где обработчики событий и коллбэки должны иметь строго определённую сигнатуру.