[type challenge][easy] pick

곰개구리·2023년 11월 20일
0

type challenge

목록 보기
3/4

문제

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 이들을 어떻게든 써도 된다
  • T에서 K만을 고른다... 말이 어렵다... 가만... 이거?
    • 교집합 아니야?

그렇다! 교집합이다!

생각해보자

TK 니 어려운 제네릭 약어 말고

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]
}

이렇게 풀렸다

profile
개굴개굴 곰개굴

0개의 댓글