Skip to content

Contraintes

Une contrainte permet de définir une règle que le typage ne pourra pas vérifier à lui seul. Par exemple, une contrainte peut vérifier qu'une chaîne de caractères respecte un format particulier (email, URL, …), ou qu'un nombre est dans une certaine plage. Une contrainte s'applique à une primitive.

Fonctionnement

Une contrainte est créée à partir :

  • d'une primitive (ex: C.String, C.Number)
  • d'un ou plusieurs checkers du DDataParser (DP.checkerEmail(), DP.checkerInt(), ...)

Au runtime, une contrainte valide la valeur, puis ajoute un marquage interne (par nom de contrainte). Côté TypeScript, ce marquage se reflète dans le type : on peut alors écrire des fonctions qui acceptent « n'importe quelle valeur portant cette contrainte », qu'il s'agisse d'une primitive contrainte ou d'un NewType qui embarque la même contrainte.

Exemple

Ensembles de contraintes

Quand vous devez appliquer plusieurs contraintes ensemble, vous pouvez créer un ensemble réutilisable avec C.createConstraintsSet(...).

Créer une contrainte

Pour créer une contrainte, utilisez C.createConstraint(name, primitive, checker) puis récupérez son type via C.GetConstraint.

Ce type (ex: SlugConstraint) sert ensuite :

  • comme « contrat » (ex: paramètre de fonction)
  • comme contrainte à appliquer lors de la création d'un NewType (C.createNewType(..., SlugConstraint))

Méthodes et Propriétés

Une contrainte est un handler (comme une primitive). Elle expose donc des méthodes de création/validation et quelques propriétés.

Méthodes

create()

typescript
function create(
	value: RawType | Primitive<RawType>
): Right<ConstrainedType<ConstraintName, RawType>> | Left<DP.DataParserError>

createOrThrow()

typescript
function createOrThrow(
	value: RawType | Primitive<RawType>
): ConstrainedType<ConstraintName, RawType>

Lève C.CreateConstrainedTypeError en cas d'échec de validation.

createWithUnknown()

typescript
function createWithUnknown(
	value: unknown
): Right<ConstrainedType<ConstraintName, RawType>> | Left<DP.DataParserError>

createWithUnknownOrThrow()

typescript
function createWithUnknownOrThrow(
	value: unknown
): ConstrainedType<ConstraintName, RawType>

Lève C.CreateConstrainedTypeError en cas d'échec de validation.

is()

typescript
function is(
	value: unknown
): value is ConstrainedType<ConstraintName, RawType>

Propriétés

name

Le nom unique de la contrainte (ex: "email", "int", ...).

checkers

La liste des checkers du DDataParser utilisés pour valider la valeur.

primitiveHandler

La primitive sur laquelle s'applique la contrainte (ex: C.String, C.Number).

Contraintes fournies par la librairie

La librairie exporte quelques contraintes prêtes à l'emploi via C.* :

Email

Valide une chaîne au format email.

Url

Valide une chaîne au format URL.

StringMin

Valide une chaîne avec une longueur minimale (>= min).

StringMax

Valide une chaîne avec une longueur maximale (<= max).

Int

Valide un nombre entier.

Positive

Valide un nombre strictement positif (>= 1).

PositiveInt

Valide un nombre entier strictement positif (>= 1).

Negative

Valide un nombre strictement négatif (<= -1).

NumberMin

Valide un nombre supérieur ou égal à min.

NumberMax

Valide un nombre inférieur ou égal à max.

PositiveTime

Valide une durée strictement positive (>= 1 milliseconde) sur la primitive C.Time.

NegativeTime

Valide une durée strictement négative (<= -1 milliseconde) sur la primitive C.Time.

Voir aussi

Diffusé sous licence MIT.