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>; // 7Por 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>; // 7Resta 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>; // 3Resta 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>; // 0El 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>; // 0Incremento 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>; // 3Multiplicació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>; // 12La 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"]; // 5Composició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>; // 10Precaució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 limitsComprobació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/Decson las versiones de un solo paso.BuildTuplees 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
- Conteo con la longitud de tuplas
- Suma y resta a nivel de tipos
- Comparaciones a nivel de tipos
- Utilidades prácticas para tipos numéricos