главная/TypeScript — работа с функциями
Основы typescript

TypeScript — работа с функциями

В TypeScript можно использовать различные подходы и паттерны при работе с функциями, включая строгую типизацию, перегрузку функций, стрелочные функции, необязательные и остаточные параметры.

Рассмотрим эти концепции более подробно с примерами.

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

TypeScript позволяет указывать типы для параметров функций и возвращаемого значения.

// Функция для сложения двух чисел с явным указанием типов
function add(a: number, b: number): number {
    return a + b;
}

const result = add(5, 10); // корректно

Необязательные параметры

Вы можете указать, что некоторые параметры функции не обязательны.

// Функция с необязательным параметром
function greet(name: string, greeting?: string): string {
    return `${greeting || 'Hello'}, ${name}`;
}

console.log(greet('Alice')); // Выводит "Hello, Alice"

Остаточные параметры (Rest Parameters)

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

// Функция, принимающая несколько числовых аргументов и возвращающая их сумму
function sumAll(...numbers: number[]): number {
    return numbers.reduce((acc, num) => acc + num, 0);
}

console.log(sumAll(1, 2, 3, 4)); // Выводит 10

Перегрузка функций

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

// Перегрузка функции
function getInfo(name: string): string;
function getInfo(age: number): string;
function getInfo(value: string | number): string {
    if (typeof value === "string") {
        return `Name: ${value}`;
    } else {
        return `Age: ${value}`;
    }
}

console.log(getInfo('Alice')); // Выводит "Name: Alice"
console.log(getInfo(42)); // Выводит "Age: 42"

Сначала мы определяем две перегрузки функции getInfo. Первая принимает строку (имя), а вторая — число (возраст).

После перегрузок идёт реализация функции. Она принимает параметр, который может быть либо строкой, либо числом. Внутри функции мы проверяем тип значения с помощью typeof и возвращаем соответствующую строку.

При вызове getInfo с разными типами аргументов TypeScript автоматически использует соответствующую перегрузку. Это дает нам гибкость в том, как мы можем использовать функцию, сохраняя при этом строгую типизацию и предсказуемость поведения.

Почему стоит использовать перегрузки?

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

Несколько примеров, где перегрузки могут быть полезны:

  1. Различное количество параметров: Если функция должна принимать разное количество параметров в зависимости от ситуации.
  2. Сильно различающаяся логика: Когда логика обработки для разных типов данных сильно отличается, перегрузки помогают поддерживать чистоту кода и его понимание.
  3. Читаемость и поддержка: Перегрузки могут улучшить читаемость кода, делая намерения программиста более ясными и предоставляя более строгую проверку типов во время компиляции.

Утверждения типов для функций

Иногда вам может потребоваться утвердить тип возвращаемого значения, особенно когда TypeScript не может правильно вывести его.

// Утверждение типа возвращаемого значения
function getArray<T>(items: T[]): T[] {
    return new Array().concat(items);
}

let numberArray = getArray<number>([1, 2, 3]); // Явно указываем, что ожидаем массив чисел