infer로 타입스크립트의 추론 직접 활용
infer 예약어 with Conditional Type
// 배열이 있을 때 배열의 요소 타입을 얻어내고 싶은 상황
type El<T> = T extends (infer E)[] ? E : never;
type Str = El<string[]>; // string
type NumOrBool = El<(number | boolean)[]>; // number | booleantype MyParameters<T> = T extends (...args: infer P) => any ? P : never;
type MyConstructorParam<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> // [a: string, b: number]
type R = MyReturnType<(a: string, b: number) => string> // string
type CP = MyConstructorParam<new (a: string, b: number) => {}> // [a: string, b: number]
type I = MyInstanceType<new (a: string, b: number) => {}> // {}매개변수에 같은 타입 변수를 선언하면 인터섹션이 된다.
Last updated