조건부 타입과 infer (Conditional Types & infer)
삼항 연산자(A ? B : C)를 값(Value)이 아닌 타입(Type) 단위에서 사용하는 고급 기법입니다. 특히 infer 키워드는 타입의 숨겨진 부분을 "추론해서 빼내오는" 강력한 도구입니다.
🕵️♂️ 타입 탐정 (infer)
"만약(extends) 이 타입이 배열이라면, 그 배열 안에 들어있는 요소의 타입이 뭔지 추론(infer)해서 가져와봐!"
// 1. 조건부 타입 (Conditional Type) 기초
type IsString<T> = T extends string ? true : false;
type A = IsString<"Hello">; // true
type B = IsString<42>; // false
// 2. infer 키워드 활용 (배열의 요소 타입 추출하기)
type UnpackArray<T> = T extends Array<infer U> ? U : T;
type C = UnpackArray<string[]>; // string으로 추출됨!
type D = UnpackArray<number>; // 배열이 아니므로 그대로 number
// 3. 함수의 반환 타입 추출하기 (ReturnType 유틸리티의 원리)
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
function getUser() {
return { id: 1, name: "Min" };
}
type User = MyReturnType<typeof getUser>;
// { id: number, name: string } 이 정확하게 추출됩니다.