Перегрузки функций и сигнатуры вызова
Объявляйте сигнатуры перегрузок для разных форм вызова и используйте сигнатуры вызова внутри типов объектов для гибких API.
«Перегрузки функций и сигнатуры вызова» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.
Введение
Цель: моделировать функции, которые принимают разные входные данные и возвращают разные результаты, используя перегрузки, а также описывать сигнатуры вызова в типах объектов для программных интерфейсов, похожих на функции обратного вызова.
Шаблон перегрузки
Перегрузки объявляются как несколько сигнатур и одна реализация, которая сужает входные данные и возвращает правильный тип.
// 1) Overload signatures (no body)
function parse(input: string): number;
function parse(input: number): string;
// 2) Single implementation compatible with all overloads
function parse(input: string | number): string | number {
if (typeof input === "string") {
return input.length; // string -> number
} else {
return String(input); // number -> string
}
}
console.log(parse("TS")); // 2 (number)
console.log(parse(123)); // "123" (string)Сигнатуры вызовов
Сигнатура вызова позволяет сделать тип объекта вызываемым и поддерживать перегрузки (это полезно для библиотек, предоставляющих вызываемые функции со свойствами).
type Stringify = {
(v: number): string;
(v: boolean): string;
};
const toStr: Stringify = (v: number | boolean) => {
return typeof v === "number" ? v.toFixed(1) : (v ? "true" : "false");
};
console.log(toStr(3));
console.log(toStr(false));Сужение в реализации
Реализация должна обрабатывать все формы перегрузок. Используйте проверки in или дискриминированные объединения, чтобы безопасно выбирать ветвь.
function area(value: { r: number } | { w: number; h: number }): number {
if ("r" in value) {
return Math.PI * value.r ** 2; // circle
}
return value.w * value.h; // rect
}
console.log(area({ r: 2 }));
console.log(area({ w: 3, h: 4 }));Перегрузки и объединения
Перегрузки и объединения:
- Перегрузки обеспечивают точные возвращаемые типы для каждого вызова.
- Объединения сохраняют одну сигнатуру: это проще, но менее конкретно.
- Выбирайте перегрузки, когда вызывающему коду нужны точные возвращаемые типы.
Советы по DX
Советы:
- Поддерживайте небольшое и понятное количество перегрузок.
- Документируйте различия в параметрах и возвращаемых значениях.
- Предпочитайте точность возвращаемого типа, если она улучшает удобство использования.
Проверка перегрузок
Быстрая проверка: Какой шаблон правильно объявляет перегрузки функции?
Итоги
Итоги: Используйте перегрузки для получения точных типов при каждом вызове, а сигнатуры вызовов — для описания вызываемых объектов. Внутри единственной реализации выполняйте сужение типов, чтобы охватить все случаи.
Часто задаваемые вопросы
Урок «Перегрузки функций и сигнатуры вызова» бесплатный?
Да — полный текст урока «Перегрузки функций и сигнатуры вызова» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Перегрузки функций и сигнатуры вызова»?
Объявляйте сигнатуры перегрузок для разных форм вызова и используйте сигнатуры вызова внутри типов объектов для гибких API. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Перегрузки функций и сигнатуры вызова»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Перегрузки функций и сигнатуры вызова
- Типизация параметра this; void и never
- Функции-утверждения и пользовательские защиты типов