infer

YOUNGJOO-YOON·2022년 2월 21일
0

typeScript

목록 보기
59/65
export namespace Infer {
    export type ElementType<T> = T extends unknown[] ? T[number] : T;
    export type InferElementType<T> = T extends (infer U)[] ? U : T;
    export type SecondArg<F> = F extends (a:any,b:infer B) => any ? B : never;
}

type ElementTest = Infer.ElementType<number[]>; // number;
type InferElementTest = Infer.InferElementType<string[]> // string;
type InferElementTest1 = Infer.InferElementType<string> // string;

type F = typeof Array['prototype']['slice']; // type F = (start?: number | undefined, end?: number | undefined) => any[] 
type SecondArg = Infer.SecondArg<F>;  // type SecondArg = number | undefined

infer는 generic으로 받은 type을 tsc가 추론하여 스스로 결정하게 된다.

type SecondArg는 전달받은 F의 타입을 추론해 해당 인자의 타입을 끌어내어 반환해주고 있다. 이를 infer가 아닌 방법으로 어떻게 하면 끌어낼 수 있을지 두렵다

profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글