Saltar al contenido
webtype.org#234 tuple-to-union · par 2

N.º 234 · 17 de agosto de 2026 · Suave

TuplaAUnión

Implementa `TupleToUnion<T>` para que convierta una tupla en la unión de los tipos de sus elementos. Todo es un único acceso indexado.

01

Intenta el puzle tú mismo

Par 2

Puzle

tuple-to-union.ts
Intento 1 de 2Aún sin comprobar

Sustituye ??? — tu solución se comprueba con los casos de abajo. Tab indenta; pulsa Escape y luego Tab para sacar el foco.

Comprobaciones

3
  • TupleToUnion<[1, 2, 3]>
    1 | 2 | 3
  • TupleToUnion<['a']>
    'a'
  • TupleToUnion<[]>
    never

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

Menos de 5 personas han resuelto este puzle hasta ahora. La distribución aparece cuando la muestra sea lo bastante grande como para significar algo.

Archivo
02

Solución comentada

Publicado el 18 de agosto de 2026

La solución

type TupleToUnion<T extends readonly unknown[]> = T[number]

El error más común

type TupleToUnion<T extends readonly unknown[]> =
  T extends readonly [infer H, ...infer R] ? H : never

Un instinto razonable — desestructurar y tomar la cabeza — pero se queda ahí y devuelve solo el primer elemento. Recurrir y unir los resultados funcionaría, y es justo el camino largo: `T[number]` ya lo hace.

Línea por línea

  1. T[number]

    Un acceso indexado cuya clave es el tipo `number` completo. Como cada índice numérico válido selecciona un elemento, pedirlos todos a la vez produce la unión de todos los tipos de elemento.

  2. TupleToUnion<[]>

    La tupla vacía no tiene ningún índice numérico válido, así que vuelve la unión de cero cosas — y la unión de nada es `never`.

Para recordar

Recurre a la recursión solo cuando indexar no pueda expresar la pregunta. `T[number]`, `keyof T` y `T[keyof T]` responden a una parte sorprendente de los problemas de tuplas y objetos en una sola línea.