Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 229 · 6 de agosto de 2026 · Difícil

    Aplana

    Implementa Flatten<T> para que aplane por completo una tupla anidada, a cualquier profundidad.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    flatten-tuple.ts
    Intento 1 de 4Aú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

    4
    • Flatten<[1, [2, 3], 4]>—
      → [1, 2, 3, 4]
    • Flatten<[]>—
      → []
    • Flatten<[[[1]]]>—
      → [1]
    • Flatten<[1, [2, [3, [4]]]]>—
      → [1, 2, 3, 4]

    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.

    Juego corto

    Menos caracteres

    Aún no hay marcas públicas.

    Archivo
    02

    Solución comentada

    Publicado el 7 de agosto de 2026

    La solución

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

    El error más común

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

    Expandir H directamente quita exactamente una capa, así que [[[1]]] se aplana a [[1]] y se detiene. La cabeza también debe aplanarse recursivamente — no es solo un contenedor que abrir, es toda una estructura anidada.

    Línea por línea

    1. H extends readonly unknown[]

      La rama que decide si este elemento hay que abrirlo. readonly unknown[] encaja con tuplas mutables y de solo lectura, así que ninguna se toma por un escalar por accidente.

    2. [...Flatten<H>, ...Flatten<R>]

      Dos llamadas recursivas, una que baja al anidamiento y otra que avanza por la tupla. Ese par es lo que hace el aplanado total en vez de de un solo nivel.

    Para recordar

    Recurrir en una dirección recorre una lista; en dos, un árbol. Casi todos los fallos de «solo bajó un nivel» son una segunda llamada recursiva que falta.

    Usa