더북(TheBook)

YXX를 명시적으로 extends하므로 B는 참일 때 타입인 string입니다. 하지만 XYX를 명시적으로 extends하지 않음에도, A는 마찬가지로 string입니다. XY 타입이 X 타입에 대입 가능하므로 extends하는 것과 다름 없기 때문입니다.

컨디셔널 타입은 타입 검사를 위해서도 많이 사용합니다.

type Result = 'hi' extends string ? true : false;
// type Result = true
type Result2 = [1] extends [string] ? true : false;
// type Result2 = false

앞의 코드를 통해 'hi'string 타입인지 아닌지를 알아낼 수 있습니다. 또한 [1][string] 타입이 아님을 확인했습니다. [1][number]number[] 타입입니다.

또한, 컨디셔널 타입은 never와 함께 사용할 때도 많습니다. 다음은 타입이 string | number이면 배열로 만들고, 그게 아니면 never로 만드는 코드입니다.

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