Saltar al contenido
webtype.org#218 last-element · par 3

N.º 218 · 26 de julio de 2026 · Media

Último

Implementa `Last<T>` para que devuelva el tipo del último elemento de una tupla. Una tupla vacía no tiene último elemento — devuelve `never`.

01

Intenta el puzle tú mismo

Par 3

Puzle

last-element.ts
Intento 1 de 3Aún sin comprobar

Sustituye ??? — tu solución se comprueba con los casos de abajo.

Comprobaciones

4
  • Last<[1, 2, 3]>
    3
  • Last<['only']>
    'only'
  • Last<[]>
    never
  • Last<[string, number]>
    number

Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

Cómo le fue a todo el mundo

Nobody is counting yet. Score distribution and the juego corto board arrive with accounts — until then your results stay on this device.

Archivo
02

Solución comentada

Publicado el 27 de julio de 2026

La 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

  1. [...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`.

  2. : never

    La 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.