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,
}
TypeScript
복사
// 풀이
type MyPick<T, K extends keyof T> = {
[U in K]: T[U]
}
TypeScript
복사
•
MyPick 의 두번째 Generic Type 이 union type 으로 받고 있다.
•
따라서 keyof T 를 통해 T 의 key 들이 union type 으로 변환하여 받도록 한다.
•
Mapped Types 을 활용!
배열(튜플)을 받아, 각 원소의 값을 key/value로 갖는 오브젝트 타입을 반환하는 타입을 구현하세요
const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const
type result = TupleToObject<typeof tuple> // expected { tesla: 'tesla', 'model 3': 'model 3', 'model X': 'model X', 'model Y': 'model Y'}
TypeScript
복사
type TupleToObject<T extends readonly (string|number)[]> = {
[K in T[number]]: K
}
TypeScript
복사
•
T[number] 하면 튜플을 union type 으로 바꿀 수 있다.
•
['a', 'b', 'c'] → 'a' | 'b' | 'c'
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
TypeScript
복사
TypeScript
복사
•