0Pricing
TypeScript Academy · Урок

Перегрузки функций и сигнатуры вызова

Объявляйте сигнатуры перегрузок для разных форм вызова и используйте сигнатуры вызова внутри типов объектов для гибких 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 — локальная установка не требуется.

Все уроки этого курса

  1. Перегрузки функций и сигнатуры вызова
  2. Типизация параметра this; void и never
  3. Функции-утверждения и пользовательские защиты типов
← Назад к TypeScript Academy