Utilidades prácticas para tipos numéricos
Aplique aritmética de tipos a restricciones de rangos y longitudes.
Utilidades prácticas para tipos numéricos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 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.
De la teoría a las herramientas
La aritmética y las comparaciones resultan útiles cuando se empaquetan como utilidades prácticas: rangos, arrays con longitud controlada e índices acotados. En esta lección, las primitivas se convierten en herramientas que realmente utilizaría en producción.
type BuildTuple<N extends number, Acc extends unknown[] = []> =
Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;Enumerar: de 0 a N-1
Una utilidad fundamental produce una unión de todos los números desde 0 hasta N-1. Construya una tupla de longitud N y lea todos sus índices como claves.
type Enumerate<N extends number, Acc extends number[] = []> =
Acc["length"] extends N
? Acc[number]
: Enumerate<N, [...Acc, Acc["length"]]>;
type A = Enumerate<4>; // 0 | 1 | 2 | 3Tipos de rango
Un Range<Start, End> produce los números desde Start hasta End - 1. Tome Enumerate<End> y excluya los valores menores que Start.
type Range<S extends number, E extends number> =
Exclude<Enumerate<E>, Enumerate<S>>;
type A = Range<2, 6>; // 2 | 3 | 4 | 5Restringir un parámetro
Utilice un rango para restringir los argumentos válidos. Una función que solo acepte una tirada pequeña de dado puede recibir Range<1, 7>, de modo que el compilador rechace los valores fuera de los límites.
type DiceFace = Range<1, 7>; // 1|2|3|4|5|6
declare function roll(face: DiceFace): void;
roll(4); // ok
// roll(8); // compile errorForzar la longitud de un array
Un tipo de array de longitud fija rechaza los arrays con un tamaño incorrecto. Construya mediante recursión una tupla de N elementos del tipo T.
type FixedArray<T, N extends number, Acc extends T[] = []> =
Acc["length"] extends N ? Acc : FixedArray<T, N, [...Acc, T]>;
type RGB = FixedArray<number, 3>; // [number, number, number]Uso de una longitud fija
Ahora un uso incorrecto produce un error de compilación. Un punto en 3D debe tener exactamente tres coordenadas.
type Vec3 = FixedArray<number, 3>;
const v: Vec3 = [1, 2, 3]; // ok
// const w: Vec3 = [1, 2]; // error: missing elementAcotar índices
Puede limitar un tipo de índice a las posiciones válidas de un array. Combine la longitud de una tupla con Enumerate para aceptar únicamente índices dentro de los límites.
type Indices<T extends readonly unknown[]> = Enumerate<T["length"]>;
type Arr = readonly ["a", "b", "c"];
type I = Indices<Arr>; // 0 | 1 | 2Acceso indexado seguro
Con un tipo de índice válido puede escribir un getter cuyo parámetro de índice no pueda salir de los límites, detectando errores de uno en uno durante la compilación.
declare function at<T extends readonly unknown[]>(
arr: T,
i: Indices<T>
): T[Indices<T>];
const x = at(["a", "b", "c"] as const, 2); // ok
// at(["a", "b", "c"] as const, 3); // errorUtilidades Min y Max
Añada las comparaciones para elegir el mayor o el menor de dos números, algo útil para limitar un valor a un rango.
type Max<A extends number, B extends number> =
GreaterThan<A, B> extends true ? A : B;
type Min<A extends number, B extends number> =
GreaterThan<A, B> extends true ? B : A;
type X = Max<3, 8>; // 8
type Y = Min<3, 8>; // 3Composición de utilidades
Estas utilidades se combinan entre sí. Una tupla cuya longitud está dentro de un rango, un índice limitado a su array y un valor acotado entre un mínimo y un máximo: cada uno es una pequeña función reutilizable a nivel de tipos.
type ValidPort = Range<1, 4>; // 1 | 2 | 3 (toy example)
type Slots = FixedArray<ValidPort, 2>; // [1|2|3, 1|2|3]Cuándo merece la pena
La aritmética de tipos resulta especialmente útil con límites pequeños y fijos: tuplas RGB, caras de dados, coordenadas de un tablero y tamaños de campos de un protocolo. No merece la pena para números grandes o dinámicos, donde los límites de recursión y la complejidad superan las ventajas de seguridad. Recurra a ella cuando el límite sea pequeño y la garantía resulte valiosa.
type Board = FixedArray<FixedArray<0 | 1, 3>, 3>; // 3x3 gridComprobación rápida
Compruebe su comprensión de las utilidades numéricas prácticas.
Recapitulación
Ha construido una pequeña biblioteca de utilidades numéricas para tipos.
EnumerateyRangeproducen uniones de números.FixedArrayimpone longitudes exactas.Indiceslimita el acceso a posiciones válidas.Min/Maxacotan los valores.
Úselas con límites pequeños y fijos. A continuación, el curso 23: simulación de tipos de tipo superior.
Preguntas frecuentes
¿La lección «Utilidades prácticas para tipos numéricos» es gratis?
Sí — el texto completo de «Utilidades prácticas para tipos numéricos» 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 «Utilidades prácticas para tipos numéricos»?
Aplique aritmética de tipos a restricciones de rangos y longitudes. 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 4 de 4.
¿Cuánto tiempo toma la lección «Utilidades prácticas para tipos numéricos»?
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