- 조건부 타입(Conditional Type) 내에서 타입 추론을 할 때 사용된다.
- 복잡한 타입을 분석하고, 그 일부를 추출할 때 매우 유용하다.
infer
: 추론하다
라는 의미로, 타입스크립트에게 특정 위치의 타입을 추론하도록 지시한다.
- 조건부 타입 내에서만 사용할 수 있다.
- 주로
extends
키워드와 함께 사용되어 타입의 구조를 검사하고, 특정 부분을 추출한다.
T extends infer U ? X : Y
예시 - 배열의 요소 타입 추출
type ArrayElementType<T> = T extends (infer U)[] ? U : never;
type NumberArray = ArrayElementType<number[]>; // number;
type StringArray = ArrayElementType<string[]>; // string
예시 - 함수 반환 타입 추출
type ReturnType<T> = T extends (...args:any[])=> infer R ? R : never;
function greeting(){ return 'Hello, world' }
type GreetingReturn = ReturnType<typeof greeting>; // string;
예시 - 튜플의 첫번째 요소 타입 추출
type FirstElement<T> = T extends [infer F, ...any[]] ? F : never;
type FristOfTuple = FirstElement<[string, number, boolean]>; // string
예시 - 객체의 특정 프로퍼티 타입 추출
type PropertyType<T, K estends keyof T>= T extends { [P in K] : infer U} ? U : never;
왜 쓸까?
- 복잡한 타입 구조에서, 특정 부분을 정확하게 추출하여 타입을 더 단단하게 한다.