Saltar al contenido
webtype.org#232 zip-tuples · par 3

N.º 232 · 9 de agosto de 2026 · Media

Zip

Implementa `Zip<A, B>` para que empareje posicionalmente los elementos de dos tuplas. Cuando difieran en longitud, detente en la más corta.

01

Intenta el puzle tú mismo

Par 3

Puzle

zip-tuples.ts
Intento 1 de 3Aú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
  • Zip<[1, 2], ['a', 'b']>
    [[1, 'a'], [2, 'b']]
  • Zip<[], []>
    []
  • Zip<[1, 2, 3], ['a']>
    [[1, 'a']]
  • Zip<[1], ['a', 'b', 'c']>
    [[1, 'a']]

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 10 de agosto de 2026

La solución

type Zip<A extends readonly unknown[], B extends readonly unknown[]> =
  A extends readonly [infer AH, ...infer AR]
    ? B extends readonly [infer BH, ...infer BR]
      ? [[AH, BH], ...Zip<AR, BR>]
      : []
    : []

El error más común

type Zip<A extends readonly unknown[], B extends readonly unknown[]> =
  A extends readonly [infer AH, ...infer AR]
    ? B extends readonly [infer BH, ...infer BR]
      ? [AH, BH, ...Zip<AR, BR>]
      : []
    : []

Sin los corchetes internos los pares se esparcen planos en el resultado: `[1, "a", 2, "b"]` en vez de `[[1, "a"], [2, "b"]]`. Hacer zip va de estructura, y la estructura vive en esos corchetes.

Línea por línea

  1. [[AH, BH], ...Zip<AR, BR>]

    El `[AH, BH]` interno es un par; la expansión añade los pares del resto. Anidar una tupla dentro de otra es cómo mantienes el emparejamiento visible en el tipo.

  2. : []

    Ambas ramas de salida terminan la recursión, así que la tupla que se agote primero detiene el zip. Eso da el comportamiento «la más corta» sin medir ninguna longitud.

Para recordar

Recorrer dos estructuras a la vez son solo dos condicionales de desestructuración anidados. La decisión de diseño interesante es qué pasa cuando difieren en longitud — y aquí la respuesta es no hacer nada especial.