studye / typescript

타입스크립트는 자바스크립트랑 다른 언어인가요?
7 stars 0 forks source link

[typescript - 2.1] Mapped Types #26

Open denzels opened 7 years ago

denzels commented 7 years ago

이미 있는 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
}
//---------------