타입스크립트는 많은 부분을 스스로 추론할 수 있습니다. 추론하려는 부분을 infer로 만들면 됩니다. 다음은 각각 매개변수, 생성자 매개변수, 반환값, 인스턴스 타입을 추론하는 타입입니다.
type MyParameters<T> = T extends (...args: infer P) => any ? P : never;
type MyConstructorParameters<T> = T extends abstract new (...args: infer P) => any ? P : never;
type MyReturnType<T> = T extends (...args: any) => infer R ? R : any;
type MyInstanceType<T> = T extends abstract new (...args: any) => infer R ? R : any;
type P = MyParameters<(a: string, b: number) => string>
// type P = [a: string, b: number]
type R = MyReturnType<(a: string, b: number) => string>
// type R = string
type CP = MyConstructorParameters<new (a: string, b: number) => {}>
// type CP = [a: string, b: number]
type I = MyInstanceType<new (a: string, b: number) => {}>
// type I = {}