반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BFS
- 소켓
- Crawling
- 자바스크립트
- dfs
- Nestjs
- type challenge
- 문자열
- 그래프
- dp
- TCP
- typescript
- 레벨 1
- Node.js
- 알고리즘
- 프로그래머스 레벨 2
- HTTP 완벽 가이드
- 타입스크립트
- 크롤링
- 가천대
- 백준
- HTTP
- 타입 챌린지
- 수학
- Algorithm
- socket
- javascript
- 쉬운 문제
- 프로그래머스
- ip
Archives
- Today
- Total
kakasoo
NTuple 타입 정의하기 본문
반응형
이 글에 나와 있는 Push Type은 이전 글에서 설명하고 있다.
type NTuple<N, T> = ?
타입 N 튜플은 타입 파라미터 N을 튜플의 크기로 하는 Tuple 타입을 의미한다.
두번째 파라미터로 받은 T는, 튜플에 포함되어 있어야 하는 값이 있는 경우, 값을 정의하기 위해 존재한다.
이 NTuple을 정의하려면 어떻게 해야 할까?
type NTuple<N extends number, T extends any[] = []> = ?
일단 N은 number를, T는 any[]를 확장해주어야 한다.
T의 경우 기본 타입으로 빈 배열 ( 여기서는 튜플이라고 하는 게 정확하다 ) 을 받는다.
파라미터를 받았으니 이제 구현 부분이다.
구현을 위해서는 튜플 타입이 의미하는 게 무엇인지, 논리를 하나 씩 따져보는 것이 좋을 것이다.
type NTuple<N extends number, T extends any[] = []> = T['length'] extends N ? T : NTuple<N, Push<T, any>>;
T는 미리 받은 배열 또는 빈 배열로 정의된다.
따라서 NTuple은 T의 length가 이미 N과 일치할 경우, 미리 받았던 배열 T를 튜플 형태로 돌려주기만 하면 된다.
만약 T의 length가 N과 다르다면 NTuple<N, Push<T, any>> 를 재귀적으로 반환
하면 된다.
NTuple<N, Push<T, any>>의 의미는, 결과적으로, 배열의 Length가 일치할 때까지 any를 넣은 튜플이 된다.
만약 T의 타입 파라미터로 받은 값이 처음에 정한 N보다 큰 length를 가지게 지정될 경우에는 타입이 any가 된다.
무한히 any가 있는 튜플은 곧 any[]일 것이고, any[]는 any로 추론된다.
반응형
'프로그래밍 > TypeScript' 카테고리의 다른 글
TypeScript type level에서의 in의 의미 (0) | 2023.01.25 |
---|---|
조건에 따라 다른 response type이 추론되게 하기 (0) | 2023.01.24 |
type Push = <T extends any[], value> = […T, value] (0) | 2023.01.20 |
배열의 Length를 뽑는 타입 (0) | 2023.01.20 |
Extract<Type, Union> (0) | 2023.01.18 |