3.3 Parameters, ConstructorParameters, ReturnType, InstanceType
이번에 배울 Utility Types는 infer를 활용한 타입들입니다.
type MyParameters<T extends (...args: any) => any>
= T extends (...args: infer P) => any ? P : never;
type MyConstructorParameters<T extends abstract new (...args: any) => any>
= T extends abstract new (...args: infer P) => any ? P : never;
type MyReturnType<T extends (...args: any) => any>
= T extends (...args: any) => infer R ? R : any;
type MyInstanceType<T extends abstract new (...args: any) => any>
= T extends abstract new (...args: any) => infer R ? R : any;
어디서 본 것 같나요? 맞습니다. 이 타입들은 2.22절 예제로 사용했습니다. 타입 이름에서 My만 빼면 모두 lib.es5.d.ts에 있는 타입입니다. 다만 이번 절에서는 타입 매개변수 T에 엄밀하게 제약을 걸어두었습니다.