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()
function create(
value: RawType | Primitive<RawType>
): EitherRight<ConstrainedType<ConstraintName, RawType>> | EitherLeft<DP.DataParserError>createOrThrow()
function createOrThrow(
value: RawType | Primitive<RawType>
): ConstrainedType<ConstraintName, RawType>Lève C.CreateConstrainedTypeError en cas d'échec de validation.
createWithUnknown()
function createWithUnknown(
value: unknown
): EitherRight<ConstrainedType<ConstraintName, RawType>> | EitherLeft<DP.DataParserError>createWithUnknownOrThrow()
function createWithUnknownOrThrow(
value: unknown
): ConstrainedType<ConstraintName, RawType>Lève C.CreateConstrainedTypeError en cas d'échec de validation.
is()
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).
