T
에서 K
프로퍼티만 선택해 새로운 오브젝트 타입을 만드는 내장 제네릭 Pick<T, K>
을 이를 사용하지 않고 구현하세요.
ex.
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
Pick<Type, Keys>
은 Type에서 특정 Key들을 골라 타입을 정의한다.
Keys에 올 값들은 Type에 있다고 볼 수 있으니 Keys에는 Types에 정의된 key 값들이 들어가면 된다.
keyof
연산자는 객체 타입에서 객체의 키 값들을 유니온 타입으로 만들어준다.
Keys는 K extends keyof T로 대체될 수 있다.
key로 쓰일 값들을 K를 순회하면서 찾고 그에 대한 타입은 T에서 찾을 수 있다.
type MyPick<T, K extends keyof T> = {
[key in K] : T[key]
}
https://github.com/type-challenges/type-challenges/issues/27410