infer_TypeScript

miin·2024년 3월 4일
0

TypeScript

목록 보기
9/9
post-thumbnail

정의

  • 추론을 가능하게 해줌
  • U가 추론 가능한 타입이면 참, 아니면 거짓
  • infer 키워드는 제약 조건 extends가 아닌 조건부 타입 extends절에서만 사용 가능
  • 조건부 타입이 아닌 경우에는 그다지 유용한 키워드가 아닐지도 모르지만, 조건부 타입에서는 굉장히 유용한 키워드이고 단골이다

기본구조

T extends infer U ? U :Y

예제

1)

type MyType<T> = T extends infer R ? R : null;

const a : MyType<number> = 123;
console.log(typeof a); //number

2) 유틸리티 타입
유틸리티 타입을 사용하게 되면 전역으로 타입이 작용하므로 따로 해당 타입(여기선 ReturnType)에 관해 따로 명시해 줄 필요가 없다

type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

function fn(num : number) {
  return num.toString(); 
  
declare function f1() : {
  a : string,
  b : number,
}

type T0 = ReturnType<() => string>;  // string
type T1 = ReturnType<(s : string) => void>;  // void
type T2 = ReturnType<typeof f1>; // {a : string , b : number}
}

const a : ReturnType<typeof fn> = "Hello";   // ReturnType<T> 이용
console.log(a); //Hello

3) Promise

type UnpackPromiseArray<P> = P extends Promise<infer K>[] ? K : any

const arr = [Promise.resolve(true)];

type ExpectedBoolean = UnpackPromiseArray<typeof arr> // boolean
  
type PromiseType<T> = T extends Promise<infer U> ? U : never;

type A = PromiseType<Promise<number>>; // number

type B = PromiseType<Promise<string | boolean>>; // string | boolean

type C = PromiseType<number>; // never

참고 블로그

0개의 댓글