더북(TheBook)

2.15.1 컨디셔널 타입 분배법칙

컨디셔널 타입, 제네릭과 never의 조합은 더 복잡한 상황에서 진가를 발휘합니다.

다음과 같은 상황을 생각해봅시다. string | number 타입이 있는데 이 타입으로부터 string[] 타입을 얻고 싶은 상황입니다. 일단 다음 코드처럼 시도해보겠습니다.

type Start = string | number;
type Result = Start extends string ? Start[] : never;
// type Result = never

하지만 뜻하지 않게 Result 타입이 never가 되어버립니다. string | numberstringextends할 수 없기 때문입니다.

이럴 때 컨디셔널 타입을 제네릭과 함께 사용하면 원하는 바를 얻을 수 있습니다.

type Start = string | number;
type Result<Key> = Key extends string ? Key[] : never;
let n: Result<Start> = ['hi'];
// let n: string[]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.