Partial·Pick·Omit·Record 등 내장 유틸리티 타입과 keyof·typeof·인덱스 접근 타입을 다룬다.
유틸리티 타입
이미 있는 타입을 변형해 새 타입을 만들어야 할 때가 많습니다. TypeScript는 자주 쓰는 변형을 유틸리티 타입으로 기본 제공합니다. 직접 만들지 않아도 됩니다.
학습 목표
Partial/Required/Readonly로 프로퍼티 성질을 바꾼다.Pick/Omit으로 일부 프로퍼티만 고른다.Record로 키-값 맵 타입을 만든다.keyof/typeof/인덱스 접근 타입을 활용한다.
예제용 기본 타입
아래 유틸리티들을 이 타입에 적용해 보겠습니다.
interface User {
id: number;
name: string;
email: string;
}
Partial — 모두 선택적으로
모든 프로퍼티를 선택적(?)으로 만듭니다. 일부만 업데이트하는 함수에 유용합니다.
function updateUser(id: number, changes: Partial<User>) {
// changes는 { id?, name?, email? }
}
updateUser(1, { name: '새이름' }); // 일부만 넘겨도 OK
Required — 모두 필수로
Partial 의 반대. 모든 프로퍼티를 필수로 만듭니다.
type FullUser = Required<User>; // 모든 필드 필수
Readonly — 모두 읽기 전용으로
모든 프로퍼티를 readonly 로 만듭니다.
const config: Readonly<User> = { id: 1, name: '민수', email: 'a@b.com' };
config.name = '영희'; // ❌ 읽기 전용
Pick — 일부만 고르기
특정 프로퍼티만 골라 새 타입을 만듭니다.
type UserPreview = Pick<User, 'id' | 'name'>;
// { id: number; name: string }
Omit — 일부만 제외하기
Pick 의 반대. 특정 프로퍼티를 빼고 나머지를 가져옵니다.
type UserWithoutEmail = Omit<User, 'email'>;
// { id: number; name: string }
| 유틸리티 | 효과 |
|---|---|
Partial<T> | 모든 프로퍼티 선택적 |
Required<T> | 모든 프로퍼티 필수 |
Readonly<T> | 모든 프로퍼티 읽기 전용 |
Pick<T, K> | K에 해당하는 프로퍼티만 |
Omit<T, K> | K를 제외한 나머지 |
Record — 키-값 맵
키 타입과 값 타입으로 객체 타입을 만듭니다.
type Role = 'admin' | 'user' | 'guest';
type Permissions = Record<Role, boolean>;
const perms: Permissions = {
admin: true,
user: true,
guest: false,
};
ReturnType — 함수의 반환 타입
함수 타입에서 반환 타입을 뽑아냅니다.
function createUser() {
return { id: 1, name: '민수' };
}
type NewUser = ReturnType<typeof createUser>;
// { id: number; name: string }
keyof — 키들의 유니온
객체 타입의 키를 리터럴 유니온으로 가져옵니다.
type UserKeys = keyof User; // 'id' | 'name' | 'email'
typeof — 값에서 타입 뽑기
typeof 를 타입 자리에서 쓰면 값의 타입을 얻습니다. 이미 만든 객체에 맞춰 타입을 정의할 때 편합니다.
const defaultSettings = {
theme: 'dark',
fontSize: 14,
};
type Settings = typeof defaultSettings;
// { theme: string; fontSize: number }
💡 TIP —
keyof typeof obj조합은 자주 쓰입니다. 값으로 만든 객체에서 키 유니온을 뽑을 때keyof typeof defaultSettings→'theme' | 'fontSize'.
인덱스 접근 타입
T[K] 로 타입 안의 특정 프로퍼티 타입을 꺼냅니다.
type EmailType = User['email']; // string
type IdOrName = User['id' | 'name']; // number | string
요약
Partial/Required/Readonly는 프로퍼티의 성질을 일괄 변경한다.Pick/Omit은 프로퍼티를 고르거나 제외한다.Record<K, V>는 키-값 맵 타입을 만든다.keyof,typeof,T[K]를 조합하면 기존 타입에서 새 타입을 유연하게 끌어낼 수 있다.
댓글 0
“TypeScript” 강좌에 대한 댓글입니다.