Solución comentada
Publicado el 31 de julio de 2026La solución
type Reverse<T extends readonly unknown[]> = T extends readonly [infer H, ...infer R] ? [...Reverse<R>, H] : []
El error más común
type Reverse<T extends readonly unknown[]> = T extends readonly [infer H, ...infer R] ? [H, ...Reverse<R>] : []
Esto recurre correctamente y reconstruye la tupla en el mismo orden en que la desarmó, así que es una función identidad rebuscada. La inversión depende únicamente de a qué lado de la expansión va la cabeza.
Línea por línea
[infer H, ...infer R]La división clásica cabeza/cola. `H` liga el primer elemento, `R` liga una tupla con todo lo demás.
[...Reverse<R>, H]La cabeza se añade *después* de la cola invertida. El primer elemento de la entrada acaba por tanto el último, y cada nivel de la recursión empuja su cabeza una posición más atrás.
Para recordar
La recursión cabeza-cola reconstruye una tupla elemento a elemento; el orden en que la reensamblas es lo único que distingue una copia de una inversión, un filtro o un map.