TypeScript-섹션9. 조건부 타입- infer(2)

손주완·2025년 7월 15일

Typescript Section9

목록 보기
3/3

🧷 선요약

  • infer는 조건부 타입 안에서 특정 타입을 추론할 수 있게 해주는 타입스크립트의 특수 문법임.
  • infer는 보통 조건부 타입 내부에서 사용되며, 추론 가능한 타입이 있을 경우 해당 타입을 바탕으로 분기된 타입 결과를 생성함.
  • 대표적인 활용 예시로는 ReturnType<T>PromiseUnpack<T> 등의 유틸리티 타입 구현이 있음.

infer로 ReturnType 구현하기

type ReturnType<T> = T extends () => infer R ? R : never;

infer R은 함수 타입 T의 반환값을 추론해 R로 잡겠다는 의미임. 예시를 보자.

type FuncA = () => string;
type FuncB = () => number;

type A = ReturnType<FuncA>; // string
type B = ReturnType<FuncB>; // number

타입 변수 T에 함수 타입을 넣으면 해당 함수의 반환값 타입을 infer R이 추론하게 됨.
FuncA() => string 타입이므로 Rstring이 되고, 따라서 Astring 타입이 됨.

추론 실패 시

type C = ReturnType<number>; // never

이 경우에는 number 타입은 함수 타입이 아니므로 조건식을 만족하지 않음.
결과적으로 ReturnType<number>never 타입이 됨.


infer로 Promise의 결과 타입 추출하기

type PromiseUnpack<T> = T extends Promise<infer R> ? R : never;

PromiseUnpackPromise<T> 타입으로부터 내부의 T 타입을 꺼내오는 유틸리티 타입임.

예시:

type PromiseA = PromiseUnpack<Promise<number>>; // number
type PromiseB = PromiseUnpack<Promise<string>>; // string

infer R을 통해 Promise<number>number 타입이 추론되고, 최종적으로 PromiseUnpack<Promise<number>>number가 됨.


🧩 마지막 요약

  • infer는 조건부 타입 내에서 특정 타입을 추론할 때 사용함.
  • 일반적으로 유틸리티 타입에서 많이 활용됨 (예: ReturnType, Parameters, PromiseUnpack 등).
  • 조건식이 성립하지 않으면 never 타입으로 수렴됨.

0개의 댓글