다만 현재 코드에서 차집합과 대칭차집합은 객체에만 적용 가능합니다. 유니언에는 적용되지 않습니다. 유니언에서 대칭차집합을 적용하려면 다음과 같이 수정해야 합니다.
type SymDiffUnion<A, B> = Exclude<A | B, A & B>;
type R3 = SymDiffUnion<1 | 2 | 3, 2 | 3 | 4>;
// type R3 = 1 | 4
Exclude
Exclude는 어떤 타입(A | B)에서 다른 타입(A & B)을 제거하는 타입입니다(이 타입도 3.2절에서 구현 원리에 대해 배웁니다).
부분집합은 이미 배웠습니다. A가 B 타입에 대입 가능하면 A는 B의 부분집합이라는 의미입니다.
type IsSubset<A, B> = A extends B ? true : false;
type R1 = IsSubset<string, string | number>;
// type R1 = true
type R2 = IsSubset<{ name: string, age: number }, { name: string }>;
// type R2 = true
type R3 = IsSubset<symbol, unknown>;
// type R3 = true