What is `R`, and what makes this recursive reversal type-check?type Reverse<T extends any[]> = T extends [infer H, ...infer Rest] ? [...Reverse<Rest>, H] : []; type R = Reverse<[1, 2, 3]>;