0Pricing
TypeScript Academy · 강의

조건부 형식에서 infer 이해하기

extends 절에서 infer를 사용해 내부 형식을 추출합니다.

조건부 형식에서 infer 이해하기은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

추론이란 무엇인가요

infer 키워드는 조건부 타입 안에 나타나며, 일치하는 위치에서 타입 변수를 포착합니다. 따라서 포착한 변수를 참 분기에서 사용할 수 있습니다.

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

기본 추론 예시

여기에서는 infer R을 사용하여 모든 함수의 반환 타입을 추출합니다.

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

추론은 어떻게 작동하나요

TypeScript는 T의 구조를 패턴과 비교합니다. 일치하면 추론된 변수에 일치한 부분이 저장됩니다. 일치하지 않으면 거짓 분기가 실행됩니다.

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

제네릭 매개변수에서 추론하기

제네릭 타입의 타입 인수를 추론할 수 있습니다. 예를 들어 Promise에서 T를 추출할 수 있습니다.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

여러 추론 변수

하나의 조건부 타입에서 여러 infer 절을 사용하여 여러 위치를 한 번에 포착할 수 있습니다.

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

함수 매개변수에서 추론하기

추론은 반환 타입뿐만 아니라 함수 매개변수 타입도 포착할 수 있습니다.

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

추론의 분배 동작

T가 유니언이면 infer를 포함한 조건부 타입이 각 유니언 멤버에 분배됩니다.

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

중첩된 추론

추론을 중첩하여 타입 구조 안쪽으로 더 깊이 들어갈 수 있습니다. 예를 들어 프로미스 안에 있는 배열의 값 타입을 추출할 수 있습니다.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

문자열 패턴과 추론

템플릿 리터럴 타입을 추론과 결합하면 문자열 리터럴 타입에서 부분 문자열을 추출할 수 있습니다.

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

일반적인 주의점

추론은 조건부 타입의 extends 절 안에서만 작동합니다. 다른 곳에서 사용하면 컴파일 오류가 발생합니다. 또한 거짓 분기에서는 추론한 변수를 사용할 수 없습니다.

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

복습: 추론

infer 키워드를 사용하면 조건부 타입에서 구조적으로 일치하는 부분의 타입 조각을 TypeScript가 포착할 수 있습니다. ReturnType, Parameters, Awaited와 같은 유틸리티 타입이 이를 기반으로 동작합니다.

빠른 확인

infer 키워드는 어디에서 사용할 수 있나요?

배운 내용

infer 키워드는 구조적 패턴에서 타입 조각을 추출하여 타입 수준의 패턴 일치를 가능하게 합니다. 강력한 유틸리티 타입과 TypeScript의 타입 안전한 메타프로그래밍을 위한 기반입니다.

자주 묻는 질문

“조건부 형식에서 infer 이해하기” 강의는 무료인가요?

네 — “조건부 형식에서 infer 이해하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“조건부 형식에서 infer 이해하기”에서 뭘 배우나요?

extends 절에서 infer를 사용해 내부 형식을 추출합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“조건부 형식에서 infer 이해하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 조건부 형식에서 infer 이해하기
  2. ReturnType 및 Parameters 처음부터 구현하기
  3. 깊게 중첩된 추론 패턴
  4. infer 실전 활용 사례: Promise 래퍼 풀기
← TypeScript Academy(으)로 돌아가기