Today I Learned_230417

1 분 소요

TypeScript

인프런 타입스크립트 강의 수강

utility types로 알아보기

링크

utility type을 왜 써야 하는가?

아래와 같은 상황일 때…

interface Profile {
    name: string,
    age: number,
    married: boolean,
}

const heejung: Profile = {
    name: 'heejung',
    age: 29,
    married: false,
}

married만 빼서 쓰자니 아래와 같이 애매해진다..

// 이거는 불가능
const newheejung: Profile = {
    name: 'zerocho',
    age: 29,
}

// 이렇게 다시 만들자니 너무 중복이고..
interface NewProfile {
    name: string,
    age: number,
}

Utility type중 Partial을 여기서 사용

const newheejung: Partial<Profile> = {
    name: 'heejung',
    age: 29,
}
  • Partial 직접 구현
// 인덱스드 시그니처, mapped types 활용
type P<T> = {
    // Key는 T의 키들만 올 수 있다.
    [Key in keyof T]?: T[Key];
}

Partial은 원래 속성을 다 optional로 만들어 준다.

// 예를 들면 이렇게 만들어 준다.
interface Profile {
    name?: string,
    age?: number,
    married?: boolean,
}

다 꺼내서 optional로 만든 다음, value의 타입을 매핑해 준다.

  • Pick
    • 여러 속성 고르기
    • Partial보단 Pick, Omit 사용하자
type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};

// 제네릭간의 제한조건 먼저 붙여준다.
// 뒤에 오는 인자값은 T의 key의 부분집합
type P<T, U extends keyof T> = {
    [Key in U]?: T[Key];
}

const newheejung: Pick<Profile, 'name' | 'age'> = {
    name: 'heejung',
    age: 29,
}

.

카테고리:

업데이트: