TypeScript. Как сделать оверлоад объекта стрелочной функции?

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

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

Например, давайте предположим, что у нас есть объект функции sum, которая принимает два аргумента - a и b, и возвращает их сумму:

let sum: (a: number, b: number) => number;
sum = (a, b) => a + b;

console.log(sum(2, 3)); // Вывод: 5

В этом примере мы определили объект функции sum, который принимает два аргумента типа number и возвращает значение типа number. Мы также присвоили ему второе значение - стрелочную функцию, которая складывает два аргумента и возвращает их сумму.

Но что, если мы хотим, чтобы функция sum также принимала строковые аргументы и возвращала их конкатенацию? Мы можем создать оверлоад объекта функции, чтобы обработать этот случай:

let sum: {
  (a: number, b: number): number;
  (a: string, b: string): string;
};

sum = (a: any, b: any) => {
  if (typeof a === 'number' && typeof b === 'number') {
    return a + b;
  } else if (typeof a === 'string' && typeof b === 'string') {
    return a + b;
  } else {
    throw new Error('Неподдерживаемый тип аргументов');
  }
};

console.log(sum(2, 3)); // Вывод: 5
console.log(sum('Hello ', 'world')); // Вывод: "Hello world"

В этом примере мы определили sum как объект функции со двумя перегруженными сигнатурами. Первая сигнатура принимает два аргумента типа number и возвращает number. Вторая сигнатура принимает два аргумента типа string и возвращает string.

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

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