0Pricing
TypeScript Academy · 강의

제네릭 제약 조건: 형식 매개변수 좁히기

extends로 제네릭에 필요한 형태 조건을 적용합니다.

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

환영합니다

고급 제네릭 제약 조건을 사용하면 타입 인수로 사용할 수 있는 타입을 좁힐 수 있어 복잡한 형태에서도 타입 안전한 연산을 수행할 수 있습니다.

제약 조건 복습

T extends U는 T를 U의 하위 타입인 타입으로 제한합니다. 이를 통해 함수 내부에서 TypeScript가 T의 형태를 알 수 있습니다.
function len<T extends { length: number }>(val: T): number {
  return val.length;
}

특정 메서드로 제한하기

해당 메서드를 포함하는 인터페이스로 제한해 T가 특정 메서드를 갖도록 요구합니다.
interface Stringable { toString(): string; }
function stringify<T extends Stringable>(val: T): string {
  return val.toString();
}

제약 조건에서 추론하기

제약 조건 안에서 keyof를 사용해 안전한 접근자를 만듭니다.
function pluck<T, K extends keyof T>(items: T[], key: K): T[K][] {
  return items.map(item => item[key]);
}
const names = pluck(users, 'name'); // string[]

고차 종류 제약 조건(시뮬레이션)

TypeScript는 진정한 고차 종류 타입을 지원하지 않지만, 조건부 타입과 제약 조건으로 이를 시뮬레이션할 수 있습니다.

원시 타입으로 제한하기

특수한 함수에서 사용할 수 있도록 타입 매개변수를 특정 원시 타입으로 제한합니다.
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
function isPrimitive<T extends Primitive>(val: T): true { return true; }

재귀적 제약 조건

재귀 패턴을 위해 제약 조건이 자기 자신을 참조하도록 만들 수 있습니다.
interface Comparable<T> { compareTo(other: T): number; }
function sort<T extends Comparable<T>>(items: T[]): T[] {
  return [...items].sort((a, b) => a.compareTo(b));
}

기본값이 있는 제약 조건

타입 매개변수에는 제약 조건과 기본값을 함께 지정할 수 있습니다. 기본값은 제약 조건을 만족해야 합니다.
function process<T extends object = Record<string, unknown>>(data: T): void {
  console.log(Object.keys(data));
}

T extends Record<string, unknown>

동적 속성 접근이 가능하도록 레코드 타입으로 제한합니다.
function getValue<T extends Record<string, unknown>>(obj: T, key: string): unknown {
  return obj[key];
}

반환 타입에서의 제약 조건 추론

T에 제약 조건이 있으면 TypeScript는 해당 제약 조건을 사용해 반환 타입에서 유효한 연산을 결정합니다.
function firstKey<T extends object>(obj: T): keyof T {
  return Object.keys(obj)[0] as keyof T;
}

NoInfer 유틸리티(TS 5.4)

TypeScript 5.4에서는 특정 인수 위치에서 타입 매개변수가 추론되지 않도록 하는 NoInfer가 도입되었습니다.
function createState<T>(initial: T, fallback: NoInfer<T>): T {
  return initial ?? fallback;
}

빠른 확인

제네릭 함수 내부에서 `T extends { length: number }`는 T에 무엇을 추가하나요?

요약

고급 제약 조건은 제네릭 타입을 특정 형태, 메서드 또는 원시 타입 유니언으로 좁힙니다. keyof, 재귀 패턴, 기본값을 결합하면 강력하고 타입 안전한 유틸리티를 만들 수 있습니다.

자주 묻는 질문

“제네릭 제약 조건: 형식 매개변수 좁히기” 강의는 무료인가요?

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

“제네릭 제약 조건: 형식 매개변수 좁히기”에서 뭘 배우나요?

extends로 제네릭에 필요한 형태 조건을 적용합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“제네릭 제약 조건: 형식 매개변수 좁히기” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. keyof 및 인덱스 접근 형식
  2. 제네릭 제약 조건: 형식 매개변수 좁히기
  3. 조건부 형식: T extends U ? X : Y
  4. 분배 조건부 형식
← TypeScript Academy(으)로 돌아가기