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

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.