¿Es posible restringir el número a un cierto rango?
Desde Typecript 2.0 RC (¿o incluso beta?) es posible utilizar tipos literales numéricos, como en type t = 1 | 2;
. ¿Es posible restringir un tipo a un rango numérico, por ejemplo, 0-255, sin escribir 256 números en el tipo?
En mi caso, una biblioteca acepta valores de color para una paleta de 0 a 255, y preferiría nombrar solo algunos pero restringirlos a 0-255:
const enum paletteColor {
someColor = 25,
someOtherColor = 133
}
declare function libraryFunc(color: paletteColor | 0-255); //would need to use 0|1|2|...
Editar: esta es una respuesta antigua. TS >= 4.5 ahora tiene herramientas para solucionar esto, aunque puede que esté limitado o no para su caso de uso. Para rangos más pequeños, esta respuesta funciona:
type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N
? Acc[number]
: Enumerate<N, [...Acc, Acc['length']]>
type IntRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>
type T = IntRange<20, 300>
---- Antigua respuesta ----
No, no es posible. Ese tipo de restricción de tipo precisa no está disponible en mecanografiado (¿todavía?)
Sólo las comprobaciones/afirmaciones en tiempo de ejecución pueden lograr eso :(
Si tienes un rango pequeño, siempre puedes escribir algo como:
type MyRange = 5|6|7|8|9|10
let myVar:MyRange = 4; // oops, error :)
Por supuesto, funciona sólo para números enteros y es muy feo :)