web-dev-qa-db-fra.com

Est-il possible de restreindre le nombre à une certaine plage

Depuis TypeScript 2.0 RC (ou même bêta?), Il est possible d'utiliser des types littéraux numériques, comme dans type t = 1 | 2;. Est-il possible de restreindre un type à une plage de nombres, par ex. 0-255, sans écrire 256 numéros dans le type?

Dans mon cas, une bibliothèque accepte les valeurs de couleur pour une palette de 0 à 255, et je préfère n'en nommer que quelques-unes mais la limiter à 0 à 255:

const enum paletteColor {
  someColor = 25,
  someOtherColor = 133
}
declare function libraryFunc(color: paletteColor | 0-255); //would need to use 0|1|2|...
31
ASDFGerte

Non, ce n'est pas possible. Ce type de contrainte de type précise n'est pas encore disponible dans TypeScript (encore?)

Seuls les contrôles/assertions d'exécution peuvent atteindre cet objectif :(

14
AlexG

Si vous avez une petite plage, vous pouvez toujours écrire quelque chose comme:

type MyRange = 5|6|7|8|9|10

let myVar:MyRange = 4; // oops, error :)

Bien sûr, cela fonctionne uniquement pour les nombres entiers et est laid comme l'enfer :)

31
Adam Szmyd

Ce n'est pas possible pour le moment mais il y a un problème ouvert sur GitHub . Actuellement, ils attendent toujours une proposition, mais cette fonctionnalité pourrait arriver un jour.

En bref, vous ne pourrez pas utiliser une plage de nombres comme type jusqu'à ce qu'une proposition soit publiée.

9
DrunkenPoney