자주 쓰이는 타입스크립트 유틸리티 클래스 정리
T의 모든 프로퍼티를 선택적(Optional 형태)으로 만드는 타입을 구성
type Partial<T> = { [P in keyof T]?: T[P];};
interface User {
name: string;
age: number;
}
type PartialUser = Partial<User>;
interface OptionalUser = {
name?: string;
age?: number;
}
위 타입 PartialUser, 인터페이스 OptionalUser 동일
T의 모든 프로퍼티를 읽기 전용(readonly)으로 설정
type Readonly<T> = { readonly [P in keyof T]: T[P];};
interface Todo {
title: string;
}
const todo: Readonly<Todo> = {
title: 'Delete inactive users',
};
todo.title = 'Hello';
// 오류: 읽기 전용 프로퍼티에 재할당할 수 없음
Partial와 반대로 T의 모든 프로퍼티를 선택적(Optional 형태)를 제거
type Required<T> = {
[P in keyof T]-?: T[P];
};
K타입을 Key값 타입으로, T타입을 value 값 타입 리턴
타입의 프로퍼티들을 다른 타입에 매핑시키는 데 사용될 수 있다.
type Record<K extends keyof any, T> = {
[P in K]: T;
};
interface User {
id: number;
age?: number;
}
type Member = 'jo' | 'kim';
const members: Record<Member, User> = {
jo: {
id: 1
age: 29
},
kim: {
id: 2
},
};
T 타입으로부터 K 프로퍼티만 추출
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
interface User {
id: number;
name: string;
age: number;
}
type UserName = Pick<User, 'id' | 'name'>;
const jo: UserName = {
id: 1,
name: 'jo',
};
Pick와 반대로 T타입으로부터 K프토퍼티를 제거
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
interface User {
id: number;
name: string;
age: number;
}
type UserName = Omit<User, 'age'>;
const jo: UserName = {
id: 1,
name: 'jo',
};
Reference