type A = string | boolean;
type B = boolean | number;
type C = A & B;
// type C = boolean
type D = {} & (string | null);
// type D = string
type E = string & boolean;
// type E = never
type F = unknown | {};
// type F = unknown
type G = never & {};
// type G = never
• 타입 C는 A와 B의 교집합이라고 생각해도 됩니다. 따라서 boolean이 됩니다.
• 타입 D는 {}와 string | null의 교집합입니다. {}에는 string이 포함되나 null은 포함되지 않습니다. 따라서 D는 string이 됩니다.
• 타입 E처럼 서로 간에 겹치는 것이 없다면 never가 됩니다.
• 타입 F와 G처럼 unknown과의 | 연산은 무조건 unknown이고, never와의 & 연산은 무조건 never가 됩니다. 이는 집합의 성질과 동일합니다. 전체집합과의 합집합은 항상 전체집합이고, 공집합과의 교집합은 항상 공집합입니다.