더북(TheBook)

이번에는 객체에서 지정한 속성만 추려보겠습니다. 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"'.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.