2.15.1 컨디셔널 타입 분배법칙
컨디셔널 타입, 제네릭과 never의 조합은 더 복잡한 상황에서 진가를 발휘합니다.
다음과 같은 상황을 생각해봅시다. string | number 타입이 있는데 이 타입으로부터 string[] 타입을 얻고 싶은 상황입니다. 일단 다음 코드처럼 시도해보겠습니다.
type Start = string | number;
type Result = Start extends string ? Start[] : never;
// type Result = never
하지만 뜻하지 않게 Result 타입이 never가 되어버립니다. string | number가 string을 extends할 수 없기 때문입니다.
이럴 때 컨디셔널 타입을 제네릭과 함께 사용하면 원하는 바를 얻을 수 있습니다.
type Start = string | number;
type Result<Key> = Key extends string ? Key[] : never;
let n: Result<Start> = ['hi'];
// let n: string[]