jaenny.dev
article thumbnail

문제

제네릭 T에서 프로퍼티 K만 선택해 새로운 객체 타입을 반환하는 내장 제네릭 Pick<T,K>를 구현해보세요.

 

예시:

interface Todo {
  title: string
  description: string
  completed: boolean
}

type TodoPreview = MyPick<Todo, 'title' | 'completed'>

const todo: TodoPreview = {
    title: 'Clean room',
    completed: false,
}

 

풀이

먼저 error 케이스를 처리해 줍니다.
제네릭 K에는 객체 타입 T의 프로퍼티들만 전달되어야 합니다.
유효하지 않은 키가 들어온다면 error를 반환합니다.
keyof를 사용하여 객체 타입 T의 프로퍼티들만 뽑아옵니다.

 

 

정답

type MyPick<T, K extends keyof T> = {
  [key in K]: T[key];
};

in을 사용하면 유니온 타입에서 하나씩 꺼내와 반복문처럼 사용할 수 있습니다. in이 더 궁금하다면 참고

T 객체에서 K로 넘어온 키들만 가진 객체를 반환해야 하기 때문에 key는 K에서만 뽑아옵니다.

profile

jaenny.dev

@jaenny.dev

Go Beyond! Front-end developer, jaenny✨