Напишите типизированную функцию сложения: при передаче двух чисел она возвращает number, при передаче двух строк — string, а смешанные пары number и string должны вызывать ошибку TypeScript.

Используйте две перегрузки: number + number → number и string + string → string. Смешанная пара не входит в публичные сигнатуры.

Короткий ответ

Что ответить на собеседовании

Используйте две перегрузки: number + number → number и string + string → string. Смешанная пара не входит в публичные сигнатуры.

Подробный разбор

Ответ с пояснениями

Используйте две перегрузки: number + number → number и string + string → string. Смешанная пара не входит в публичные сигнатуры.

Реализация дополнительно проверяет типы во время исполнения:

function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: number | string, b: number | string): number | string {
  if (typeof a === 'number' && typeof b === 'number') return a + b;
  if (typeof a === 'string' && typeof b === 'string') return a + b;
  throw new TypeError('Ожидались два числа или две строки');
}

Сигнатура реализации не является отдельной доступной вызывающему перегрузкой. Это важно: иначе union-пара разрешила бы нежелательные сочетания.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее