이번에는 객체에서 지정한 속성만 추려보겠습니다. Pick 타입입니다.

    type MyPick<T, K extends keyof T> = {
      [P in K]: T[P];
    };
    
    type Result = MyPick<{ a: string, b: number, c: number }, 'a' | 'c'>;
    
    /*
    type Result = {
      a: string;
      c: number;
    }
    */

    K 타입 매개변수는 T 객체의 속성 이름이어야 하므로 extends keyof T 제약을 주었습니다. MyPick 타입을 사용해 keyof T'a' | 'b' | 'c'에서 'a' | 'c'만 추릴 수 있게 됩니다. 반대로 지정한 속성을 제거하려면 어떻게 해야 할까요? 이 방법은 다음 절에서 설명하겠습니다.

    코드를 다음과 같이 수정하면 에러가 발생합니다.

    type Result = MyPick<{ a: string, b: number, c: number }, 'a' | 'c' | 'd'>;
    // Type '"a" | "c" | "d"' does not satisfy the constraint '"a" | "c" | "b"'. Type '"d"' is not assignable to type '"a" | "c" | "b"'.
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.