Именование типов 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++.