infer는 조건부 타입 내에서 특정 타입을 추론하는 키워드이다.
ReturnType 구현
함수 타입에서 반환값의 타입만 추출하는 ReturnType을 만들어보자.
type ReturnType<T> = T extends () => infer R ? R : never;
type FuncA = () => string;
type FuncB = () => number;
type A = ReturnType<FuncA>; // string
type B = ReturnType<FuncB>; // number
동작 원리
조건식 T extends () => infer R에서 infer R은 조건식을 참으로 만드는 최적의 R 타입을 추론하라는 의미다.
타입 A를 계산하는 과정은 다음과 같다.
1단계: 타입 변수 T에 FuncA가 할당된다.
T = () => string
2단계: 조건식이 다음 형태가 된다.
() => string extends () => infer R ? R : never
3단계: 조건식을 참으로 만드는 R 타입을 추론한다.
R=string
4단계: 추론 성공 시 조건식이 참이 되어 R을 반환한다.
- 결과:
string
추론 실패
추론이 불가능하면 조건식이 거짓이 된다.
type C = ReturnType<number>;
// number는 함수 타입이 아니므로 R 추론 불가능
// never
PromiseUnpack 구현
Promise의 resolve 타입을 추출하는 타입도 만들 수 있다.
type PromiseUnpack<T> = T extends Promise<infer R> ? R : never;
type PromiseA = PromiseUnpack<Promise<number>>; // number
type PromiseB = PromiseUnpack<Promise<string>>; // string
T가 Promise<R> 형태일 때, R 타입을 추론하여 반환한다.
'TIL' 카테고리의 다른 글
| [CS50] C 기초 (0) | 2025.11.05 |
|---|---|
| [TS] 조건부 타입과 infer를 활용한 타입 추론 연습 (0) | 2025.11.05 |
| [TS] 분산적인 조건부 타입 (0) | 2025.11.05 |
| [TS] 타입 조작 및 고급 타입 활용 연습 (0) | 2025.11.05 |
| [TS] 템플릿 리터럴 타입 (0) | 2025.11.05 |
