더북(TheBook)

어떤 규칙으로 결괏값이 나오는 것인지 헷갈릴 수 있는데, 반환값의 타입이 매개변수의 타입의 부분집합인 경우에만 그 둘의 교집합이 됩니다. 그 외의 경우는 모두 never가 됩니다. 즉, 1 | 21 | 2 | 3의 부분집합이므로 둘의 교집합인 1 | 2가 되고, 1 | 22 | 3의 부분집합이 아니므로 never가 되는 것입니다.

매개변수에 같은 타입 변수를 선언하면 인터섹션이 된다는 사실을 바탕으로 유니언을 인터섹션으로 만드는 타입을 작성할 수 있습니다.

type UnionToIntersection<U>
  = (U extends any ? (p: U) => void : never) extends (p: infer I) => void
    ? I
    : never;
type Result5 = UnionToIntersection<{ a: number } | { b: string }>;
/*
type Result5 = {
  a: number;
  } & {
  b: string;
}
*/
type Result6 = UnionToIntersection<boolean | true>;
// type Result6 = never
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.