Используйте две перегрузки: number + number → number и string + string → string. Смешанная пара не входит в публичные сигнатуры.
Напишите типизированную функцию сложения: при передаче двух чисел она возвращает number, при передаче двух строк — string, а смешанные пары number и string должны вызывать ошибку TypeScript.
Используйте две перегрузки: 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-пара разрешила бы нежелательные сочетания.