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,
}
/* _____________ 여기에 코드 입력 _____________ */
type MyPick<T, K> = any
/* _____________ 테스트 케이스 _____________ */
말이 참 어렵다 T니 K니 내장 제네릭이니. 이놈의 공대생들은 조금 쉬운 단어를 쓰면 병이라도 걸리나보다.
쉽게 생각해보자
그렇다! 교집합이다!
생각해보자
T
니 K
니 어려운 제네릭 약어 말고
type A: 'a' | 'b' | 'c' | 'd' | 'e'
이고
type B: 'c' | 'd' | 'e' | 'f' | 'h'
라고 생각하자
A
에서 B
프로퍼티만을 선택한다는건, 맞다! 교집합이다. 즉 두 타입의 공통적 부분인 'c' | 'd' | 'e'
를 뽑아내면 된다.
이렇게 생각하니 조금 풀어낼 만 한 것 같다.
그렇다면
type MyPick<T, K> = any
이 코드는
type MyPick<T, K extends keyof T> = {
[k in K]: T[k]
}
이렇게 풀렸다