Learning
레슨 8 / 8·15분

TypeScript 레퍼런스

유틸리티 타입 모음

typescript
// ─── 객체 변환 ───
Partial<T>          // 모든 속성을 선택적으로
Required<T>         // 모든 속성을 필수로
Readonly<T>         // 모든 속성을 readonly로

// ─── 속성 선택/제외 ───
Pick<T, K>          // K에 해당하는 속성만 선택
Omit<T, K>          // K에 해당하는 속성을 제외

// ─── 함수 관련 ───
ReturnType<F>       // 함수의 반환 타입 추출
Parameters<F>       // 함수의 매개변수 타입 (튜플)
ConstructorParameters<C> // 생성자 매개변수 타입

// ─── 매핑 ───
Record<K, V>        // 키 K, 값 V인 객체 타입
                    // Record<string, number> = { [k: string]: number }

// ─── Union 조작 ───
Exclude<T, U>       // T에서 U에 해당하는 타입 제거
Extract<T, U>       // T에서 U에 해당하는 타입만 추출
NonNullable<T>      // null, undefined 제거

// ─── 문자열 변환 ───
Uppercase<S>        // 대문자로
Lowercase<S>        // 소문자로
Capitalize<S>       // 첫 글자 대문자
Uncapitalize<S>     // 첫 글자 소문자

// ─── 인스턴스 ───
InstanceType<C>     // 클래스의 인스턴스 타입
ThisParameterType<F> // this 매개변수 타입

타입 가드 패턴 정리

typescript
// typeof — 원시 타입 체크
if (typeof x === "string") { /* string */ }
if (typeof x === "number") { /* number */ }

// instanceof — 클래스 인스턴스 체크
if (x instanceof Date) { /* Date */ }
if (x instanceof Error) { /* Error */ }

// in — 속성 존재 체크
if ("swim" in animal) { /* { swim: ... } */ }

// 사용자 정의 타입 가드 (is)
function isUser(v: unknown): v is User {
  return typeof v === "object" && v !== null && "id" in v;
}

// Discriminated Union — kind/type 필드로 구분
switch (action.type) {
  case "add": /* AddAction */ break;
  case "remove": /* RemoveAction */ break;
}

// as const — 리터럴 타입 보존
const config = { port: 3000, host: "localhost" } as const;
// { readonly port: 3000; readonly host: "localhost" }

자주 쓰는 패턴

  • as const — 객체/배열을 리터럴 타입으로 고정
  • satisfies T — 타입을 체크하되 추론은 유지
  • keyof T — 객체의 키를 유니온 타입으로
  • T[K] — 인덱스 접근 타입 (Lookup Type)
  • typeof x — 값에서 타입을 추출
  • T extends U ? X : Y — 조건부 타입
  • infer R — 조건부 타입 내 타입 추론
  • [K in keyof T] — Mapped Type (속성 순회)
  • ! (non-null assertion) — null이 아님을 단언 (주의해서 사용)
  • unknown — any보다 안전한 최상위 타입 (타입 가드 필요)
💡

TypeScript 공식 Playground(typescriptlang.org/play)에서 타입을 실험해 볼 수 있습니다. 에디터 위에 마우스를 올리면 추론된 타입을 바로 확인할 수 있어 학습에 매우 유용합니다.