minstudio

조건부 타입과 infer (Conditional Types & infer)

삼항 연산자(A ? B : C)를 값(Value)이 아닌 타입(Type) 단위에서 사용하는 고급 기법입니다. 특히 infer 키워드는 타입의 숨겨진 부분을 "추론해서 빼내오는" 강력한 도구입니다.

🕵️‍♂️ 타입 탐정 (infer 키워드) T extends Array<infer U> ? U : T "만약(extends) T가 배열이라면, 그 배열 요소의 타입이 뭔지 추론(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 } 이 정확하게 추출됩니다.
조건부 타입과 infer (Conditional Types & infer) | Minstudio