Array.reverse의 타입 버전을 구현하라
Implement the type version of Array.reverse
type Reverse<T extends any[]> = T extends [...infer Rest,infer Last]?
[Last,...Reverse<Rest>]
:[]
귀납의 마지막 경우 빈 배열,
귀납의 마지막 이전의 경우 [첫 번째 타입],
귀납의 두 번째 마지막 이전의 경우 [두 번째 타입,첫 번째 타입],
...
귀납의 두 번째 경우 [뒤에서 두 번째 타입,...,두 번째 타입,첫 번째 타입],
귀납의 첫 번째 경우 [뒤에서 첫 번째 타입,뒤에서 두 번째 타입,...,두 번째 타입,첫 번째 타입]이 된다.
그래서 이와 같은 풀이가 가능하다
type Reverse<T extends readonly any[], Result extends readonly any[] = []> =
T extends [infer A, ...infer B]
? Reverse<B, [A, ...Result]>
: Result
보조 제네릭을 사용하는 경우가 있었다.
https://github.com/type-challenges/type-challenges/issues/3337