앞의 예제에서 A1(string) extends string은 true이므로 B1 타입은 number이고, A2(number) extends string은 false이므로 B2 타입은 boolean입니다.
extends라는 예약어 때문에 헷갈릴 수 있는데 명시적으로 extends해야만 참이 되는 것이 아닙니다.
interface X {
x: number;
}
interface XY {
x: number;
y: number;
}
interface YX extends X {
y: number;
}
type A = XY extends X ? string : number;
// type A = string
type B = YX extends X ? string : number;
// type B = string