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];
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.