Как объявить функцию с типами аргументов и возвращаемого значения?
В TypeScript одна из ключевых особенностей — возможность явно указывать типы аргументов функции и ее возвращаемого значения. Это позволяет контролировать входные данные, заранее описывать контракт функции и предотвращать множество ошибок на этапе компиляции.
Объявление функции с типами аргументов
Каждый аргумент функции может быть описан своим типом. Если тип не указан, то по умолчанию используется any, что сводит пользу типизации на нет.
Пример простой функции:
function greet(name: string, age: number) {
console.log(\`Привет, ${name}. Тебе ${age} лет.\`);
}
Здесь явно указано, что name — строка, а age — число. Любая попытка передать неподходящие данные приведет к ошибке компиляции.
Объявление возвращаемого типа
После списка аргументов через двоеточие указывается тип возвращаемого значения. Если функция ничего не возвращает, используется void.
Пример:
function add(a: number, b: number): number {
return a + b;
}
function logMessage(message: string): void {
console.log(message);
}
В первой функции возвращается число, а во второй — ничего, поэтому указан void.
Использование never в функциях
Иногда функция может не возвращать управление вообще — например, выбрасывает исключение или зацикливается. В этом случае используется специальный тип never.
function throwError(message: string): never {
throw new Error(message);
}
Функциональные выражения и стрелочные функции
Для функций, которые объявляются как выражения или стрелочные функции, типизация выглядит аналогично, но часто используется промежуточный тип для описания сигнатуры.
const multiply = (x: number, y: number): number => {
return x \* y;
};
Можно отдельно вынести тип:
type Operation = (a: number, b: number) => number;
const divide: Operation = (a, b) => a / b;
Такой подход полезен при многократном использовании одинаковых сигнатур функций.
Опциональные параметры
В TypeScript можно указывать параметры, которые не обязательны. Для этого используется знак вопроса.
function printUserInfo(name: string, age?: number): void {
if (age) {
console.log(\`${name}, ${age} лет\`);
} else {
console.log(\`${name}, возраст не указан\`);
}
}
При этом в месте вызова параметр age можно передавать, а можно опустить.
Параметры по умолчанию
Функции могут иметь значения по умолчанию для аргументов. В таком случае их тип выводится автоматически.
function greetUser(name: string, role: string = "user"): string {
return \`Добро пожаловать, ${name}. Ваша роль: ${role}\`;
}
Параметры с остатком (rest parameters)
Если функция принимает произвольное количество аргументов, используется синтаксис ... и массив с типом элементов.
function sumAll(...numbers: number\[\]): number {
return numbers.reduce((acc, n) => acc + n, 0);
}
Перегрузка функций
TypeScript поддерживает перегрузку функций, когда одна функция может иметь несколько сигнатур, а реализация определяется общим телом.
function combine(a: string, b: string): string;
function combine(a: number, b: number): number;
function combine(a: any, b: any): any {
return a + b;
}
const strResult = combine("Hello, ", "World"); // строка
const numResult = combine(2, 3); // число
Таким образом, типы аргументов и возвращаемого значения позволяют описать контракт функции максимально точно и сделать код безопаснее и понятнее.