web-dev-qa-db-ja.com

TypeScriptのユニオンタイプと交差タイプの命名

共用体タイプおよび交差型という用語の背後にあるロジックを理解できません)TypeScriptで。

実用的には、異なる型のプロパティがプロパティのセットである場合、それらを&演算子と組み合わせると、結果の型はunionそれらのセットの。その論理に従って、私はこのような型が共用体型と呼ばれることを期待します。それらを|と組み合わせると、それらの共通のプロパティであるセットのintersectionのみを使用できます。

ウィキペディア その論理を支持しているようです:

任意の空でない集合Sのべき集合(すべてのサブセットの集合)は、ブール代数、集合の代数を形成し、2つの演算∨:=∪(和集合)と∧:=∩(交差)を持ちます。

ただし、 typescriptlang.org によると、これは正反対です。&は、交差型|共用体タイプに使用されます。

別の見方があると思いますが、わかりません。

42
sevcsik

これについて別の考え方があります。赤いもの、青いもの、大きなもの、小さなものの4つのセットを考えてみましょう。

すべての赤いものとすべての小さなもののセットをintersectすると、unionプロパティの-セット内のすべてに、redプロパティとsmallプロパティの両方があります。

しかし、unionofred small thingsand青い小さなもの、結果のセットではsmallnessプロパティのみがユニバーサルです。 Intersecting「redsmall」と「bluesmall」は「small」を生成します。

言い換えると、値のドメインの和集合を取ると、交差するプロパティのセットが生成され、その逆も同様です。

画像形式: enter image description here

22
Ryan Cavanaugh

タイプ A | Bは、どちらかAまたはBであるオブジェクトを指します。言い換えると、このようなタイプの値は、Aの値とBの値のnionから取得されます。

タイプ A & Bは、両方AおよびBであるオブジェクトを指します。言い換えると、このようなタイプの値は、Aの値とBの値のintersectionから取得されます。

名前とセマンティクスは、C++などの他の言語でも同じです。

11
user663031

ここでの混乱は、交差するセットをどのように想像するか、特に&に関して(少なくとも私にとってはそうだった)、おそらく原因です。つまり、交差点を、タイプ自体ではなく、タイプのメンバーを含むものと見なします。誤解にスポットライトを当て、概念を明確にすることを願うグラフィックをまとめました。

Union/Intersection diagram

0
Drazen Bjelovuk