이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.
type TupleToObject<T extends readonly any[]> = {
[P in T[number]]:P
}
여기서 const tuple = ['tesla', 'model 3'] as const 일때,
TupleToObject<typeof tuple> 은 { tesla: 'tesla'; 'model 3': 'model 3'} 와 같다.
type TupleToObject : TupleToObject라는 tuple을 object로 변환 시키는 타입을 정의한다.
<T extends readonly any[]> : any타입의 원소를 갖는 읽기만 가능한 배열을 조건으로 하는 T를 정의한다.
[P in T[number]]: P : readonly any[] 자체가 튜플을 이야기하므로, T는 튜플이라고 볼 수있다. 그리고, 튜플은 T[0], T[1] 과 같이 숫자로 원소에 접근할 수 있기 때문에 T[number]와 같이 쓸 수 있으며
[P in T[number]]: P 는 튜플 T의 원소들을 나열하고 그 타입은 P(자기자신) 이라고 정의한다고 해석할 수 있다.
{ tesla: 'tesla'; 'model 3': 'model 3'}에서 tesla만 작은 따옴표가 없는 이유는 'tesla' = tesla 이기도 하고, model 3는 중간에 띄어쓰기가 있기 때문에 따옴표를 씌워준 것이다.
'Language > Typescript' 카테고리의 다른 글
타입챌린지 : 43-Exclude (easy) (0) | 2023.03.02 |
---|---|
타입챌린지 : 18-Length of Tuple (easy) (0) | 2023.03.02 |
타입챌린지 : 14-First of Array (easy) (0) | 2023.03.02 |
타입챌린지 : 7-Readonly (easy) (0) | 2023.03.01 |
타입챌린지 : 4-Pick (easy) (0) | 2023.02.28 |