extends와 삼항 연산자를 이용해 조건에 따라 각각 다른 타입을 정의하도록 돕는 문법이다.
number extends string ? 과 같은 조건식이 있고, 이 조건이 참이라면 ? 우측의 타입인 Number 타입이 결과가 되고 아니라면 : 우측의 타입인 String 타입이 결과가 된다.number extends string은 number 타입이 string 타입의 서브타입이 아니기 때문에 거짓이 되고, 그 결과 타입 A는 string 타입이 된다.


number | string은 number의 서브타입이 아니므로 조건식이 거짓이 되어 number가 될거라고 예상할 수 있다.string | number 타입으로 정의된다. 왜?StringNumberSwitch<number>StringNumberSwitch<string>결과 : number | stringExclude(제외하다) 타입을 다음과 같이 정의할 수 있다.
number | boolean 타입이 된다.
ReturnType을 만들 때 이용할 수 있다.
T extends () => infer R에서 infer R은 이 조건식을 참이 되도록 만들 수 있는 최적의 R 타입을 추론하라는 의미이다. (그냥 R로 보면된다.)() ⇒ string extends () ⇒ infer R ? R : never