Перейти к содержанию

Тип Union

Объединение (Union) — это мощный механизм, позволяющий создавать из множества существующих типов данных логическое условие, по которому данные могут принадлежать к одному из указанных типов. Объединение указывается с помощью оператора прямой черты |, по обе стороны которой располагаются типы данных.

let v1: T1 | T2 | T3

Переменной, которой был указан тип объединения A или B или C, может быть присвоено значение, принадлежащие к одному из трех типов.

class A {}
class B {}
class C {}

let identifier: A | B | C // значение может принадлежать только одному типу (A или B или C)

Поскольку значение может принадлежать ко множеству порой несовместимых типов, компилятор, без вмешательства разработчика, расценивает принадлежность значения к типу, который наделен общими для всех типов признаками.

class Bird {
  fly(): void {}

  toString(): string {
    return 'bird'
  }
}

class Fish {
  swim(): void {}

  toString(): string {
    return 'fish'
  }
}

class Insect {
  crawl(): void {}

  toString(): string {
    return 'insect'
  }
}

function move(animal: Bird | Fish | Insect): void {
  animal.fly() // Error
  animal.swim() // Error
  animal.crawl() // Error

  animal.toString() // ок, задекларировано во всех типах
}

Тип Intersection

Пересечение (Intersection) — ещё один мощный механизм TypeScript, который позволяет рассматривать множество типов данных, как один. Пересечение указывается с помощью оператора амперсанда &, по обе стороны от которого указываются типы данных.

Переменной, которой был указан тип пересечение A и B и С может быть присвоено значение, принадлежащее к типам A и B и C одновременно.

let name: A & B & C // значение должно принадлежать ко всем типам одновременно

Итоги

  • Тип Объединение (Union Types) позволяет указывать в качестве типа выражение, которое перечисляет типы, разделенные оператором прямой черты |, к одному из которых должно принадлежать значение.
  • Тип Пересечение (Intersection Types) позволяет указывать в качестве типа множество типов, разделенных оператором амперсанда &, к каждому из которых должен принадлежать тип данных значения.