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

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>
): EitherRight<ConstrainedType<ConstraintName, RawType>> | EitherLeft<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
): EitherRight<ConstrainedType<ConstraintName, RawType>> | EitherLeft<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.

Int

Valide un nombre entier.

Positive

Valide un nombre strictement positif (>= 1).

Negative

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

Voir aussi

Diffusé sous licence MIT.