이미 있는 type 정의로 부터 Mapped Type 을 이용해서 새로운 type을 만들어 낼 수 있음.
비슷하지만 속성이 다른 type의 재정의에 편리함.
interface Person {
name: string;
age?: number;
}
// Partial
// Person property가 모두 optional인 새로운 타입을 정의
type PartialPerson = Partial<Person>;
type Partial<T> = {
readonly [P in keyof T]: T[P];
}
interface PartialPerson {
name?: string;
age?: number;
}
//---------------
//Readonly
// Person property가 모두 realonly인 새로운 타입을 정의
type ReadOnlyPerson = ReadOnly<Person>;
type Partial<T> = {
[P in keyof T]?: T[P];
}
interface PartialPerson {
readonly name: string;
readonly age: number;
}
//---------------
//Pick
// 선택한 property만을 가지는 새로운 type 정의
type PickPerson = Pick<Person, "name">;
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
}
interface PickPerson {
name: string;
}
//---------------
//Record
type RecordPerson = Record<'before' | 'after', Person>;
type Record<K extends string, T> = {
[P in K]: T;
}
interface RecordPerson {
before: Person,
after: Person
}
//---------------
이미 있는 type 정의로 부터 Mapped Type 을 이용해서 새로운 type을 만들어 낼 수 있음. 비슷하지만 속성이 다른 type의 재정의에 편리함.