TypeScript 유틸리티 타입 완전 정리
2026-02-10
TYPESCRIPTUTILITY-TYPES
TypeScript는 자주 사용하는 타입 변환을 위한 내장 유틸리티 타입을 제공합니다.
이 글에서는 Partial, Required, Pick, Omit, Record 등 모든 유틸리티 타입을 정리합니다.
1. Partial
모든 속성을 선택적으로 만듭니다.
interface User { id: number; name: string; email: string; } type PartialUser = Partial<User>; // { id?: number; name?: string; email?: string; } function updateUser(user: PartialUser) { // 일부 속성만 업데이트 가능 }
2. Required
모든 속성을 필수로 만듭니다.
interface Config { host?: string; port?: number; } type RequiredConfig = Required<Config>; // { host: string; port: number; }
3. Readonly
모든 속성을 읽기 전용으로 만듭니다.
type ReadonlyUser = Readonly<User>; // { readonly id: number; readonly name: string; ... }
4. Pick<T, K>
특정 속성만 선택합니다.
type UserName = Pick<User, "name" | "email">; // { name: string; email: string; }
5. Omit<T, K>
특정 속성을 제외합니다.
type UserWithoutId = Omit<User, "id">; // { name: string; email: string; }
6. Record<K, T>
키-값 타입을 정의합니다.
type UserMap = Record<string, User>; // { [key: string]: User } type Status = "pending" | "approved" | "rejected"; type StatusConfig = Record<Status, { color: string }>;
7. Exclude<T, U>
T에서 U를 제외합니다.
type T0 = Exclude<"a" | "b" | "c", "a">; // "b" | "c" type T1 = Exclude<string | number | (() => void), Function>; // string | number
8. Extract<T, U>
T에서 U에 할당 가능한 타입만 추출합니다.
type T0 = Extract<"a" | "b" | "c", "a" | "f">; // "a"
9. NonNullable
null과 undefined를 제거합니다.
type T0 = NonNullable<string | number | undefined>; // string | number
10. Parameters
함수의 파라미터 타입을 튜플로 추출합니다.
type T0 = Parameters<() => string>; // [] type T1 = Parameters<(s: string) => void>; // [string]
11. ReturnType
함수의 반환 타입을 추출합니다.
type T0 = ReturnType<() => string>; // string type T1 = ReturnType<(s: string) => number>; // number
12. 실무 활용
// API 응답 타입 변환 type ApiResponse<T> = { data: T; status: number; }; // 업데이트 요청 (일부 필드만) type UpdateRequest<T> = Partial<Omit<T, "id" | "createdAt">>; // DTO 변환 type UserDTO = Pick<User, "name" | "email">;
13. 실무 팁
- 조합 사용: 여러 유틸리티 타입을 조합하여 복잡한 타입 생성
- 타입 별칭: 자주 사용하는 조합은 타입 별칭으로 정의
- 문서화: 복잡한 타입 변환은 주석으로 설명
TypeScript 유틸리티 타입은 "타입 변환을 쉽게 만든다"는 철학을 따릅니다.
적절히 활용하면 타입 정의를 간결하고 재사용 가능하게 만들 수 있습니다.
