IsUnion
다음으로는 유니언인지 판단하는 IsUnion 타입을 만들어보겠습니다.
type IsUnion<T, U = T> = IsNever<T> extends true
? false
: T extends T
? [U] extends [T]
? false
: true
: false;
왜 U = T로 타입 매개변수를 하나 더 만들었을까요? T extends T는 무슨 의미일까요? T extends T는 항상 true가 아니냐고 할 수 있는데 사실 그렇습니다. 그런데도 사용하는 이유는 바로 분배법칙을 만들기 위해서입니다. 유니언의 경우 컨디셔널 타입 제네릭과 만나면 분배법칙이 발생합니다.