


Если функция принимает строку и массив строк, перегрузки позволяют дать каждому вызову точный тип результата. В примере Mentoring.digital функция убирает пробелы по краям. Для строки она возвращает строку, для массива возвращает массив.
Сначала перечислите доступные сигнатуры, затем напишите одну реализацию. Её параметры и результат должны быть совместимы с объявленными вариантами. Сигнатура реализации нужна для проверки тела функции. Доступные вызовы определяются объявлениями перегрузок выше.
function trimValue(value: string): string;
function trimValue(value: string[]): string[];
function trimValue(
value: string | string[]
): string | string[] {
return typeof value === "string"
? value.trim()
: value.map(item => item.trim());
}
const text = trimValue(" a ");
const items = trimValue([" a ", " b "]);
Для text TypeScript выводит string, для items выводит string[]. Если переменная сама имеет тип string | string[], ни одна из двух сигнатур не принимает её целиком. Сузьте тип до вызова или добавьте отдельную доступную сигнатуру с объединением аргументов и результатов.
Если результат одинаков для всех входов, часто достаточно одного параметра с объединением типов. Сигнатуры полезны, когда нужно выразить зависимость результата от входа или разные наборы аргументов. Проверьте оба корректных вызова и недопустимый тип, например число. В таком примере TypeScript должен отклонить вызов с числом до запуска программы.
Подобные интерфейсы удобно разбирать на курсе фронтенда с практикой TypeScript. Для API со многими вариантами входа можно сравнить перегрузки и другие варианты типизации вместе с наставником по TypeScript.