Solución comentada
Publicado el 27 de julio de 2026La solución
type Last<T extends readonly unknown[]> = T extends readonly [...unknown[], infer L] ? L : never
El error más común
type Last<T extends readonly unknown[]> = T[number]
Indexar una tupla con `number` da la unión de *todos* los tipos de elemento, así que `[1, 2, 3]` produce `1 | 2 | 3`. La información de posición se pierde en cuanto indexas así.
Línea por línea
[...unknown[], infer L]Un patrón de tupla admite exactamente un elemento rest, y puede ir al principio. Frente a una tupla de longitud fija, el rest absorbe todo salvo la última posición, que se liga a `L`.
: neverLa tupla vacía no encaja — no hay última posición que ligar — así que la rama falsa responde con el tipo que no tiene valores.
Para recordar
Un elemento rest en un patrón de tupla no tiene por qué ir al final. Los rest iniciales son la forma de llegar al final de una tupla sin contar.