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]}
처럼 사용하여도 에러를 일으키지 않는다.
문제가 간단하여 내 풀이와 크게 다른 코드는 없었다