Search
Duplicate

Typescript Type Challenge!! (쉬움)

간단소개
Type Challenge를 도전해보자!
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
TypeScript
Scrap
태그
9 more properties

Pick

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
복사