Create utility type Reverse
type Reverse<Tuple> = Tuple extends [infer Head, ...infer Rest]
? [...Reverse<Rest>, Head] : [];
const test: Reverse<[1,2,3,4]> = [4,3,2,1];
// test: [4,3,2,1]- Generic으로 받은 Tuple을 첫 번째 인덱스 요소인 Head와 나머지 요소인 Rest로 분리.
- [1,2,3,4]
- Head: 1, Rest: 2,3,4
- Rest를 다시 재귀 호출
- Head: 2, Rest: 3,4
- Head: 3, Rest: 4
- Head: 4, Rest:
- [4,3,2,1]
이러한 식으로 호출이 되어집니다. 그러므로 test의 type은 [4,3,2,1]이 되고 기존의 값의 순서가 변경된 것을 알 수 있습니다.