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