이번에는 객체에서 지정한 속성만 추려보겠습니다. 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"'.