PassFront
  1. PassFront
  2. База знаний
  3. Union и Intersection типы

Как работает union в TypeScript?

Union и Intersection типы

Union (A | B) — тип, значение которого может быть одним из нескольких вариантов.

Пример

type Id = string | number;

function format(id: Id) {
  if (typeof id === 'number') return id.toFixed(0);
  return id.toUpperCase();
}

Без проверки доступны только общие для всех вариантов операции. Проверка (typeof, in, instanceof, сравнение поля) сужает тип в ветке.

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

type Result =
  | { status: 'ok'; data: string }
  | { status: 'error'; message: string };

function show(r: Result) {
  if (r.status === 'ok') return r.data;
  return r.message;
}

Общее литеральное поле (status) позволяет TypeScript точно определить вариант. Через never в default можно проверить, что все варианты обработаны.

Коротко для собеседования

Union — «одно из»; работать с ним можно через сужение типов, а для объектов удобны дискриминированные объединения с общим полем.

Подробнее: TypeScript Handbook — Union Types