Именование типов union и типов пересечений TypeScript

Я не могу понять логику терминов union types и типов пересечений в TypeScript.

Прагматически, если свойства разных типов являются наборами свойств, если я их совмещаю с оператором &, результирующий тип будет объединением этих множеств. Следуя этой логике, я бы ожидал, что такие типы называются типами union. Если я объединю их с | , Я могу использовать только общие свойства их, пересечение множеств.

Википедия, похоже, поддерживает эту логику:

Набор мощности (множество всех подмножеств) любого данного непустого множества S образует булеву алгебру, алгебру множеств, с двумя операциями ∨: = ∪ (объединение) и ∧: = ∩ (пересечение).

Однако, по словам typescriptlang.org, это точно противоположно: & используется для создания типов пересечений и | используется для типов объединения.

Я уверен, что есть еще один способ взглянуть на него, но я не могу понять.

Ответ 1

Вот еще один способ подумать об этом. Рассмотрим четыре набора: красные вещи, синие вещи, большие вещи и мелочи.

Если вы пересекаете множество всех красных вещей и всех мелочей, вы получаете объединение свойств - все в наборе имеет как свойство red, так и свойство small.

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

Другими словами, взяв объединение области значений, вы получите пересекающийся набор свойств и наоборот.

Ответ 2

Тип A | B A | B относится к объектам, которые являются либо A либо B Другими словами, значения такого типа берутся из объединения значений для A и значений для B

Тип A & B относится к объектам, которые являются как A и B Другими словами, значения такого типа берутся из пересечения значений для A и значений для B

Именование и семантика идентичны на других языках, таких как C++.