더북(TheBook)
type Reverse<T> = T extends [...infer L, infer R] ? [R, ...Reverse<L>] : [];

생각보다 코드가 간단하지요? 재귀 타입은 코드를 간단하게 만듭니다. 차례대로 따져보면,

1. [1, 2, 3] 배열 타입이 있을 때 L은 [1, 2]가 되고, R은 3이 됩니다.

2. [R, ...Reverse<L>]에서 [3, ...Reverse<[1, 2]>]가 됩니다.

3. 마찬가지 이유로 Reverse<[1, 2]>[2, ...Reverse<[1]>]이고,

4. Reverse<[1]>[1, ...Reverse<[]>]입니다.

5. Reverse<[]>는 []이므로 Reverse<[1]>은 [1]이 되고,

6. Reverse<[1, 2]>는 [2, 1],

7. Reverse<[1, 2, 3]>은 [3, 2, 1]이 됩니다.

또는 Reverse 타입을 응용해서 함수의 매개변수 순서를 바꾸는 타입을 만들 수 있습니다. 이것도 한번 만들어보세요(힌트: 함수의 매개변수와 반환값 타입을 추론하는 것은 2.22절에서 배웠습니다. 같은 절에서 매개변수 타입을 튜플로 만드는 것도 배웠습니다).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.