
픽 타입은 특정 타입에서 몇 개의 속성을 선택하여 타입을 정의한다.
/*
4 - Pick
-------
by Anthony Fu (@antfu) #쉬움 #union #built-in
### 질문
`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,
}
> GitHub에서 보기: https://tsch.js.org/4/ko
*/
/* _____________ 여기에 코드 입력 _____________ */
type MyPick<T, K extends keyof T> = {
[key in K]: T[key]
}
/* _____________ 테스트 케이스 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Expected1, MyPick<Todo, 'title'>>>,
Expect<Equal<Expected2, MyPick<Todo, 'title' | 'completed'>>>,
// @ts-expect-error
MyPick<Todo, 'title' | 'completed' | 'invalid'>,
]
interface Todo {
title: string
description: string
completed: boolean
}
interface Expected1 {
title: string
}
interface Expected2 {
title: string
completed: boolean
}
시작전에 생각했던 힌트
type MyPick<T, K extends keyof T> = {...}
T[Key]를 타입에 넣어주었다type MyPick<T, K extends keyof T> = {
...: T[Key]
}
type MyPick<T, K extends keyof T> = {
[key in K]: T[key]
}
출처