본문 바로가기
Language/Typescript

타입챌린지 : 4-Pick (easy)

by hsloth 2023. 2. 28.

이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.

 

https://github.com/type-challenges/type-challenges/blob/main/questions/00004-easy-pick/README.md

 

GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

Collection of TypeScript type challenges with online judge - GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

github.com

 

type MyPick<T, K extends keyof T> = {
  [P in K]: T[P]
};

 

type MyPick : MyPick 이라는 타입을 정의한다.

<T, K extends keyof T> : 제네릭 T와 K를 정의하는데, K는 T의 key를 값으로 가지는 type이다.

[P in K]: T[P] : K에 해당하는 값들을 P라는 타입 파라미터로 정의하고 그 값들의 타입은 T[P] 이다. 여기서 T[P]는 객체를 접근할 때와 같이 생각하면 된다. ex) obj['key'] -> T[keys] -> T[P] 로 변했다고 생각해보자.

[P in K] 는 for const P of K 로 이해하면 쉽다. 

 

의문점

그렇다면 왜 [P in K]: K[P] 는 안될까...? 그냥 [P in K]: T[P] 자체로 문법일 수도 있을 것 같다. 잘 모르겠으면 외우는게 최고다.

-> 해결 : K는 key의 배열같은 느낌이라고 생각하면 된다. 즉 K = ["key1", "key2", "key3"] 따라서, K[0]과 같이 접근은 가능하겠으나(이것도 실제로는 안될거같지만, 이해를 돕기위해 이렇게 설명하겠다) K["key1"] 과 같은 접근은 불가능하다.