
유틸리티 타입과 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];
}