utility-typestypescript
TypeScript 유틸리티 타입 완전 정리
✨ AI 요약
긴 글, 핵심만 먼저 — 이 글을 3줄로 정리해드려요.
조회 1
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 유틸리티 타입은 "타입 변환을 쉽게 만든다"는 철학을 따릅니다.
적절히 활용하면 타입 정의를 간결하고 재사용 가능하게 만들 수 있습니다.