더북(TheBook)

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에 엄밀하게 제약을 걸어두었습니다.