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

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.

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

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 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'] extends infer X ? X : never

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.