기본 패턴
ts
interface User {
id: number;
name: string;
email: string;
}
type UserPatch = Partial<User>;
type UserSummary = Pick<User, "id" | "name">;설명
- 유틸리티 타입은 기존 타입을 자주 필요한 방식으로 변형하기 위해 TypeScript가 미리 제공하는 도구 모음입니다.
Partial<T>는 모든 속성을 optional로 만들고,Pick<T, K>는 필요한 키만 골라 새 타입을 만듭니다.Omit<T, K>는 반대로 일부 키를 제외하고,Record<K, V>는 키 집합과 값 타입으로 새 객체 타입을 구성합니다.ReturnType<T>나Parameters<T>처럼 함수 시그니처에서 정보를 뽑는 도구도 있어, 타입 중복을 크게 줄일 수 있습니다.- 핵심은 타입을 매번 새로 쓰기보다, 이미 있는 타입에서 안전하게 변형해 재사용하는 습관입니다.
짧은 예제
ts
type Status = "idle" | "loading" | "done";
type StatusLabels = Record<Status, string>;
type UpdateUser = Partial<User>;
type UserNameOnly = Pick<User, "name">;빠른 정리
| 유틸리티 | 역할 |
|---|---|
Partial<T> | 모든 속성을 선택 속성으로 변경 |
Pick<T, K> | 일부 키만 선택 |
Omit<T, K> | 일부 키를 제외 |
Record<K, V> | 키 집합으로 새 객체 타입 구성 |
ReturnType<T> | 함수 반환 타입 추출 |
주의할 점
유틸리티 타입은 편리하지만, 원본 타입의 의도를 흐릴 정도로 중첩하면 오히려 읽기 어려워집니다. 자주 쓰는 변형은 별도 이름을 붙여 두는 편이 더 관리하기 좋습니다.
참고 링크
1 sources