Validation des entrées à la compilation
Rejeter les expressions DSL mal formées avant l’exécution.
Validation des entrées à la compilation est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 4 leçons au total.
Validation des entrées à la compilation
Les langages spécifiques à un domaine au niveau des types peuvent rejeter les expressions mal formées avant l'exécution. À l'aide de littéraux de modèle et de types conditionnels, vous validez la structure d'une chaîne au niveau des types et refusez les entrées non valides.
Exemple : un petit langage de sélection
Imaginez que vous acceptiez des chaînes telles que "user.name" ou "order.items.length". Nous voulons rejeter "user." ou ".name" à la compilation.
Analyser avec des littéraux de modèle
Les types de littéraux de modèle découpent une chaîne en parties à l'aide de infer, ce qui constitue le fondement de l'analyse à la compilation. Le motif réel est délimité par des accents graves (tête, point, queue avec inférence) ; nous désignons ce motif de séparation par DotSplit.
// Real TS: backtick pattern matching Head, ".", Tail.
type Split<S extends string> =
S extends DotSplit<infer Head, infer Tail>
? [Head, ...Split<Tail>]
: [S];
type P = Split<"a.b.c">; // ["a", "b", "c"]Valider chaque segment
Un type conditionnel vérifie qu'aucun segment n'est vide. Un segment vide rend l'entrée invalide. Le même motif DotSplit (un littéral de modèle entre accents graves dans le code réel) pilote la récursion.
type NonEmpty<S extends string> = S extends "" ? false : true;
type Valid<S extends string> =
S extends DotSplit<infer H, infer T>
? H extends "" ? false : Valid<T>
: NonEmpty<S>;
type V1 = Valid<"a.b">; // true
type V2 = Valid<"a.">; // falseConditionner l’API à la validité
Utilisez le type de validité pour contraindre un paramètre de fonction : les chaînes valides conservent leur type ; les chaînes invalides se résolvent en never, ce qui empêche la compilation de l’appel.
declare function path<S extends string>(
p: Valid<S> extends true ? S : never
): void;
path("user.name"); // ok
path("user."); // Error: argument is neverRejeter les jetons inconnus
Vous pouvez également restreindre les caractères autorisés. Faites correspondre uniquement les motifs de segments connus ; tout le reste se réduit à un type qui rejette la valeur.
type Allowed = "user" | "order" | "name" | "items";
type CheckSeg<S extends string> = S extends Allowed ? true : false;Valider les opérateurs
Pour une DSL d’expressions comme "age > 18", faites correspondre l’opérateur avec un littéral de gabarit et vérifiez qu’il appartient à un ensemble autorisé. Le motif (espace gauche O espace droit) est un littéral de gabarit entre accents graves dans le code réel ; nous le désignons par CondMatch.
type Op = ">" | "<" | "=" | ">=" | "<=";
// Real TS: backtick pattern -> left, " ", infer O, " ", right.
type IsCond<S extends string> =
S extends CondMatch<infer O>
? O extends Op ? true : false
: false;
type C1 = IsCond<"age > 18">; // true
type C2 = IsCond<"age ! 18">; // falseCombiner les vérifications
Les validateurs réels vérifient plusieurs conditions à la fois : segments non vides, jetons autorisés et structure équilibrée. Chacune est un type conditionnel ; combinez-les avec des types auxiliaires de style logique.
type And<A, B> = A extends true ? (B extends true ? true : false) : false;Limites de la récursion
La récursion au niveau des types est soumise à des limites de profondeur. Pour les chaînes très longues, le compilateur peut afficher l’erreur "type instantiation is excessively deep". Limitez la longueur des entrées analysées ou simplifiez la grammaire.
Mieux que l’analyse à l’exécution
Un analyseur à l’exécution ne signale le problème que lorsque la chaîne incorrecte est évaluée. La validation à la compilation rejette le littéral dès que vous le saisissez, avec un retour complet de l’éditeur et sans aucun coût à l’exécution.
Pourquoi est-ce important
De nombreuses DSL acceptent des entrées sous forme de chaînes (chemins, requêtes, formats). Valider leur structure dans le système de types permet de détecter les fautes de frappe et les expressions mal formées avant l’exécution du programme, transformant ainsi une catégorie d’erreurs à l’exécution en erreurs de compilation.
Vérification rapide
Vérifiez votre compréhension de la validation des entrées à la compilation.
Récapitulatif
Vous avez validé les entrées d’une DSL avant l’exécution en analysant les littéraux de chaîne avec des types de littéraux de gabarit et infer, puis en vérifiant les segments et les opérateurs avec des types conditionnels. Conditionner un paramètre de fonction au type de validité fait que les expressions mal formées se résolvent en never et empêchent la compilation, tout en tenant compte des limites de récursion.
Questions Fréquemment Posées
La leçon « Validation des entrées à la compilation » est-elle gratuite ?
Oui — le texte complet de « Validation des entrées à la compilation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Validation des entrées à la compilation » ?
Rejeter les expressions DSL mal formées avant l’exécution. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer TypeScript Academy ?
Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Validation des entrées à la compilation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?
Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Qu’est-ce qu’un DSL au niveau des types
- Concevoir un DSL de requêtes fluide
- Validation des entrées à la compilation
- Messages d’erreur dans les DSL au niveau des types