0Pricing
TypeScript Academy · Lección

Suma y resta a nivel de tipos

Construya operaciones aritméticas manipulando tuplas.

Suma y resta a nivel de tipos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

Aritmética mediante longitudes

Con la representación basada en la longitud de las tuplas, la suma se convierte en concatenación y la resta en eliminación de un prefijo. Se calcula sobre las tuplas y, después, se lee la longitud resultante.

type BuildTuple<N extends number, Acc extends unknown[] = []> =
  Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;

Suma

Para sumar A + B: construya una tupla de longitud A, construya otra de longitud B, expanda ambas en una tupla nueva y lea su longitud.

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

type S = Add<3, 4>; // 7

Por qué la concatenación suma

Una tupla de longitud 3 seguida de una tupla de longitud 4 produce una tupla de longitud 7. Unir las marcas de dos conteos crea un conteo combinado, por lo que las longitudes se suman.

type A = Add<2, 2>; // 4
type B = Add<0, 5>; // 5
type C = Add<1, 6>; // 7

Resta mediante prefijo

Para calcular A - B: construya una tupla de longitud A y, después, infiérala como un prefijo de longitud B seguido de un resto. El rest tiene longitud A - B.

type Sub<A extends number, B extends number> =
  BuildTuple<A> extends [...BuildTuple<B>, ...infer Rest]
    ? Rest["length"]
    : never;

type D = Sub<7, 4>; // 3

Resta paso a paso

Para Sub<7, 4>: construya una tupla de longitud 7, haga coincidir un prefijo de longitud 4, capture Rest (de longitud 3) y lea su longitud. El prefijo eliminado contiene exactamente B marcas.

type A = Sub<5, 2>; // 3
type B = Sub<4, 4>; // 0

El underflow devuelve never

Los números a nivel de tipos no son negativos. Si B > A, no existe ningún prefijo válido, el patrón falla y el resultado es never. Si lo prefiere, puede establecerlo en 0.

type A = Sub<2, 5>; // never

type SubSafe<A extends number, B extends number> =
  [Sub<A, B>] extends [never] ? 0 : Sub<A, B>;
type B = SubSafe<2, 5>; // 0

Incremento y decremento

Los casos especiales de sumar y restar uno son tan habituales que merece la pena darles un nombre. Inc añade un elemento; Dec elimina uno.

type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];
type Dec<N extends number> =
  BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;

type A = Inc<4>; // 5
type B = Dec<4>; // 3

Multiplicación por repetición

La multiplicación es una suma repetida. Añada B a un acumulador A veces, contando hacia abajo con Dec y acumulando con Add.

type Mul<A extends number, B extends number, Acc extends number = 0> =
  A extends 0 ? Acc : Mul<Dec<A>, B, Add<Acc, B>>;

type A = Mul<3, 4>; // 12

La utilidad BuildTuple

Toda operación de esta lección depende de BuildTuple. Es la única primitiva reutilizable: proporciónele un número y obtendrá una tupla de esa longitud. Manténgala en un solo lugar y construya el resto sobre ella.

type Five = BuildTuple<5>; // [unknown, unknown, unknown, unknown, unknown]
type N = Five["length"];   // 5

Composición de operaciones

Como cada operación recibe y devuelve un número, se pueden componer libremente. Puede escribir expresiones como Add<Mul<2, 3>, 4> y el compilador las evalúa.

type Result = Add<Mul<2, 3>, 4>; // 10

Precaución práctica

Estos trucos son excelentes para cantidades pequeñas: índices de arrays, tamaños fijos y rangos acotados. Para números grandes o matemáticas generales, el límite de recursión y la ausencia de números negativos los hacen poco prácticos. Úselos cuando los valores sean pequeños y estáticos.

type A = Add<8, 7>;  // 15 (fine)
// Add<5000, 5000> would exceed recursion limits

Comprobación rápida

Compruebe su comprensión de la aritmética a nivel de tipos.

Recapitulación

Ha implementado aritmética en el sistema de tipos.

  • Add: concatena tuplas y lee la longitud.
  • Sub: infiere un prefijo y lee la longitud del resto.
  • Inc/Dec son las versiones de un solo paso.
  • BuildTuple es la primitiva compartida.

Siguiente: comparar números a nivel de tipos.

Preguntas frecuentes

¿La lección «Suma y resta a nivel de tipos» es gratis?

Sí — el texto completo de «Suma y resta a nivel de tipos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Suma y resta a nivel de tipos»?

Construya operaciones aritméticas manipulando tuplas. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Suma y resta a nivel de tipos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conteo con la longitud de tuplas
  2. Suma y resta a nivel de tipos
  3. Comparaciones a nivel de tipos
  4. Utilidades prácticas para tipos numéricos
← Volver a TypeScript Academy