타입 챌린지 4 - Pick

소파의 벨로그·2025년 2월 19일

타입챌린지

목록 보기
1/131

문제 링크

문제

T에서 K 프로퍼티만 선택해 새로운 오브젝트 타입을 만드는 내장 제네릭 Pick<T, K>을 이를 사용하지 않고 구현하세요.

내 풀이

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

K에는 keyof T라는 제약을 두어 다음 반례를 만족시켰다.

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

// @ts-expect-error
type a=MyPick<Todo, 'title' | 'completed' | 'invalid'>

또, K에는 keyof T라는 제약이 있어서 Mapped type을 사용할 때도 의미있었다.

K는 keyof T여서 K에 속하는 값이 항상 T에 들어갈 수 있기 때문에

별도의 처리를 하지 않고

{[Key in K]:T[Key]}

처럼 사용하여도 에러를 일으키지 않는다.

다른사람의 풀이

문제가 간단하여 내 풀이와 크게 다른 코드는 없었다

0개의 댓글