Saltar al contenido
webtype.orgwebtype.org#216 type-level-add · par 5

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 216 · 24 de julio de 2026 · Brutal

    Suma a nivel de tipos

    Implementa `Add<A, B>` para que devuelva la suma como tipo literal numérico. TypeScript no tiene aritmética a nivel de tipos, así que hay que contar — `BuildTuple<N>` está disponible y da una tupla de longitud `N`.

    01

    Intenta el puzle tú mismo

    Par 5

    Puzle

    type-level-add.ts
    type BuildTuple<N extends number, Acc extends unknown[] = []> =
      Acc['length'] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>
    Intento 1 de 5Aú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
    • Add<1, 2>
      3
    • Add<0, 0>
      0
    • Add<12, 5>
      17
    • Add<40, 2>
      42

    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 25 de julio de 2026

    La solución

    type Add<A extends number, B extends number> = [
      ...BuildTuple<A>,
      ...BuildTuple<B>,
    ]['length']

    El error más común

    type Add<A extends number, B extends number> =
      [...BuildTuple<A>]['length']

    Esto recupera una longitud pero nunca combina las dos tuplas, así que `B` se ignora por completo. La aritmética tiene que ocurrir dentro de la tupla, no después.

    Línea por línea

    1. [...BuildTuple<A>, ...BuildTuple<B>]

      Expansiones de tuplas variádicas. Dos tuplas de longitud `A` y `B` se concatenan en una de longitud `A + B` — esa concatenación es la suma.

    2. ['length']

      Un acceso indexado sobre una tupla. Para una tupla de longitud fija, la propiedad `length` es un tipo literal numérico, que es justo la respuesta.

    Para recordar

    La aritmética a nivel de tipos es contar disfrazado. La longitud de tupla es el único contador que da TypeScript, y el límite de recursión lo corta cerca del millar — por eso nadie publica una calculadora a nivel de tipos.

    Usa