0Pricing
TypeScript Academy · Урок

Объединения типов: A или B

Используйте |, чтобы допустить несколько вариантов типов

«Объединения типов: A или B» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Типы-объединения позволяют значению иметь один из нескольких типов. Они записываются с помощью оператора `|` и необходимы для моделирования данных реального мира.

Базовый синтаксис объединений

Объединяйте два или более типа с помощью `|`. Переменная с объединяющим типом может содержать значение любого из перечисленных типов.
let id: string | number;
id = 'abc123'; // OK
id = 42;       // OK
// id = true;  // Error

Объединение в параметрах функции

Принимайте в функции входные данные нескольких типов с помощью параметра объединяющего типа.
function format(val: string | number): string {
  return typeof val === 'string' ? val.toUpperCase() : val.toFixed(2);
}

Сужение обязательно для вариантов объединения

Без сужения можно вызывать только методы, общие для всех вариантов объединения. Для методов, специфичных для типа, сначала необходимо выполнить сужение.
function process(val: string | number) {
  // val.toFixed(2); // Error — not on string
  if (typeof val === 'number') {
    val.toFixed(2); // OK
  }
}

Объединение с литеральными типами

Объединение литеральных значений создаёт похожий на перечисление набор допустимых строковых или числовых значений.
type Direction = 'north' | 'south' | 'east' | 'west';
type StatusCode = 200 | 201 | 400 | 404 | 500;

Объединение для допускающих отсутствие значений типов

Наиболее распространённый вариант объединения — `T | null` или `T | undefined`, представляющий необязательные значения при включённом strictNullChecks.
function getUser(id: number): User | null {
  return db.find(u => u.id === id) ?? null;
}

Объединение типов объектов

Объединения могут сочетать типы объектов. Без сужения TypeScript разрешает обращаться только к свойствам, общим для всех вариантов.
type Cat = { kind: 'cat'; meow(): void };
type Dog = { kind: 'dog'; bark(): void };
type Pet = Cat | Dog;
function speak(pet: Pet) {
  if (pet.kind === 'cat') pet.meow();
  else pet.bark();
}

Три и более типа в объединении

Объединения могут включать столько типов, сколько необходимо.
type Input = string | number | boolean | null;

Объединение в возвращаемых типах

Функции могут возвращать разные типы в зависимости от своей логики. Это выражается с помощью объединения возвращаемых типов.
function divide(a: number, b: number): number | null {
  if (b === 0) return null;
  return a / b;
}

Дискриминируемые объединения

Добавьте общее литеральное свойство — дискриминатор — к вариантам объединения. TypeScript использует его для автоматического сужения типа.
type Square = { kind: 'square'; side: number };
type Circle = { kind: 'circle'; radius: number };
type Shape = Square | Circle;

Общие свойства без сужения

Если все варианты объединения имеют общее свойство, к нему можно обращаться без сужения.
type A = { name: string; x: number };
type B = { name: string; y: number };
type AB = A | B;
function getName(obj: AB): string {
  return obj.name; // OK — name is on both
}

Быстрая проверка

Какой синтаксис создаёт объединяющий тип, который может быть строкой или числом?

Повторение

Объединения (`|`) разрешают значения нескольких типов. Сужайте объединения перед использованием операций, специфичных для типа. Объединения литеральных типов ограничивают значения конечным набором. Дискриминируемые объединения добавляют общий тег для более простого сужения.

Часто задаваемые вопросы

Урок «Объединения типов: A или B» бесплатный?

Да — полный текст урока «Объединения типов: A или B» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Объединения типов: A или B»?

Используйте |, чтобы допустить несколько вариантов типов Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Объединения типов: A или B»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Объединения типов: A или B
  2. Пересечения типов: A и B
  3. Размеченные объединения для безопасного сопоставления с шаблонами
  4. Практические шаблоны с объединениями и пересечениями
← Назад к TypeScript Academy