유틸리티 타입과 Mapped Type은 이미 정의되어 있는 타입을 기반으로 새로운 타입을 생성할 때 사용합니다.
- Utility Type :
Readonly
,Required
,Partial
, Pick
,Omit
등- Mapped Type :
in
,in keyof
, 매핑 수정자(?
,-?
,readonly
,-readonly
)
기존에 정의되어 있는 타입을 기반으로 새로운 타입을 생성할 때 사용하는 타입스크립트 내장 타입
https://www.typescriptlang.org/ko/docs/handbook/utility-types.html
Readonly<Type>
readonly
로 설정한 타입을 생성Readonly
키워드를 붙임// 인터페이스로 정의
interface ReadonlyTodo extends Readonly<Todo> {}
// 타입 별칭으로 정의
type ReadonlyTodo = Readonly<Todo>;
Required<Type>
Partial
의 반대Partial<Type>
Pick<Type, Keys>
Pick<Todo, 'title' | 'content'>
Omit<Type, Keys>
Omit<Todo, 'title' | 'content'>
in
: 유니언 타입을 기반으로 객체 타입 생성type UserField = 'id' | 'name' | 'address' | 'phone';
type User = {
[ Prop in UserField ]: string;
}
// type User = {
// address: string;
// id: string;
// name: string;
// phone: string;
// }
in keyof
: 객체 타입을 기반으로 객체 타입 생성keyof
: 객체로 정의된 타입의 모든 속성을 유니언 타입으로 반환type User = {
readonly id: string;
name: string;
address: string;
phone?: string;
}
type UserField = {
[ Prop in keyof User ]: string | undefined;
}
// type UserField = {
// readonly id: string | undefined;
// name: string | undefined;
// address: string | undefined;
// phone?: string | undefined;
// }
?
, -?
, readonly
, -readonly
수정자 사용// 모든 속성을 옵셔널로
type MyPartial<T> = {
[ P in keyof T ]?: T[P];
}
// 모든 속성에서 readonly 키워드 제거
type MyPartial<T> = {
-readonly [ P in keyof T ]?: T[P];
}