TypeScript·

4 - Pick

  • #Type Challenges
  • #TypeScript

질문

T에서 K 프로퍼티만 선택해 새로운 오브젝트 타입을 만드는 내장 제네릭 Pick<T, K>을 이를 사용하지 않고 구현하세요.

예시:

1
interface Todo {
2
title: string
3
description: string
4
completed: boolean
5
}
6
7
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
8
9
const todo: TodoPreview = {
10
title: 'Clean room',
11
completed: false,
12
}
13
14

선행 지식

  1. keyof T

    객체 타입 T의 모든 프로퍼티 이름을 유니온 타입으로 만든다.

    1
    interface Todo {
    2
    title: string
    3
    description: string
    4
    completed: boolean
    5
    }
    6
    7
    keyof Todo
    8
    // 'title' | 'description' | 'completed'
  2. 제네릭 제한

    1
    // @ts-expect-error
    2
    MyPick<Todo, 'title' | 'completed' | 'invalid'>,

    코드를 보면 잘못된 key가 들어갈 경우 처음부터 에러를 내도록 기대하고 있다.
    따라서 애초에 넣을 때부터 올바른 키만 받도록 제한을 두어야한다.

  3. Mapped Type

    1
    {
    2
    [P in K]: ...
    3
    }

    객체 타입을 키 기준으로 반복 생성할 때 사용하는 문법이다.
    K에 들어 있는 각각의 키를 순회하면서, 새로운 객체 타입의 프로퍼티를 만든다.

  4. 인덱스 접근

    1
    T[P]

    객체 타입 T에서 키가 P인 프로퍼티의 타입을 가져올 때 사용한다.

풀이