0Pricing
TypeScript Academy · Leçon

Qu’est-ce qu’un DSL au niveau des types

Utiliser les types pour restreindre une API fluide aux programmes valides.

Qu’est-ce qu’un DSL au niveau des types est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Qu'est-ce qu'un langage spécifique à un domaine au niveau des types ?

Un langage spécifique à un domaine au niveau des types (un langage conçu pour un domaine particulier) utilise les types TypeScript pour contraindre une interface de programmation, de sorte que seuls les programmes valides se compilent. Les types jouent le rôle d'une grammaire : les combinaisons invalides sont rejetées avant même l'exécution du code.

Langages spécifiques à un domaine intégrés

Un langage spécifique à un domaine intégré vit à l'intérieur du langage hôte (ici, TypeScript) plutôt que dans un analyseur distinct. Vous écrivez du code TS ordinaire, mais le système de types impose les règles du langage.

Un exemple familier

Vous avez déjà utilisé des langages spécifiques à un domaine au niveau des types : un constructeur de requêtes qui n'autorise que les noms de colonnes valides, ou un routeur qui déduit les paramètres à partir d'un chemin. Les types encodent ce que l'interface de programmation autorise.

Contraindre une interface de programmation fluide

L'idée centrale est la suivante : chaque méthode renvoie un type qui limite les méthodes que vous pouvez appeler ensuite. Appeler les éléments dans le mauvais ordre empêche la compilation.

interface Empty { from(t: string): HasFrom; }
interface HasFrom { where(c: string): HasFrom; select(): string; }

declare const q: Empty;
q.from("users").select();      // ok
q.select();                    // Error: select not on Empty

Machines à états dans les types

Ce modèle constitue une machine à états au niveau des types : chaque interface est un état et chaque méthode est une transition vers un autre état. Le compilateur parcourt la machine à mesure que vous enchaînez les appels.

Pourquoi ne pas se contenter de vérifications à l'exécution ?

Les vérifications à l'exécution échouent tardivement, en production, alors que des utilisateurs sont concernés. Un langage spécifique à un domaine au niveau des types échoue tôt, dans l'éditeur, avec un soulignement rouge, avant la livraison du code. Les mêmes règles, mais un retour beaucoup moins coûteux.

Paramètres de type fantômes

Les langages spécifiques à un domaine transportent souvent des informations dans des paramètres de type fantômes : des types génériques qui n'existent qu'à la compilation pour suivre l'état accumulé (colonnes sélectionnées, variables liées) sans coût à l'exécution.

interface Query<Selected extends string> {
  select<C extends string>(c: C): Query<Selected | C>;
}

Les types littéraux comme jetons

Les types littéraux de chaînes jouent le rôle de jetons du langage. Combinés aux littéraux de modèle et aux unions, ils permettent au système de types de raisonner sur le contenu textuel de votre langage.

type Direction = "asc" | "desc";
declare function orderBy(col: string, dir: Direction): void;
orderBy("age", "asc");   // ok
orderBy("age", "up");    // Error: not a Direction

Les éléments constitutifs

Les langages spécifiques à un domaine au niveau des types combinent les types génériques pour l'état, les types conditionnels pour les embranchements, les littéraux de modèle pour analyser les chaînes et les types mappés pour transformer les structures. Les leçons suivantes utilisent chacun de ces éléments.

Les compromis

Les langages spécifiques à un domaine au niveau des types offrent de solides garanties, mais peuvent produire des erreurs énigmatiques et ralentir les compilations lorsqu'ils sont utilisés à l'excès. Les bons langages spécifiques à un domaine équilibrent la sécurité et la lisibilité des messages d'erreur (une leçon ultérieure traite ce sujet).

Pourquoi est-ce important

Encoder les règles du domaine dans les types permet au compilateur de devenir un expert du domaine : il rejette automatiquement les absurdités. C'est ainsi que les constructeurs de requêtes, les bibliothèques de formulaires et les systèmes d'effets offrent de si solides garanties.

Vérification rapide

Évaluez votre compréhension des langages spécifiques à un domaine au niveau des types.

Récapitulatif

Un langage spécifique à un domaine au niveau des types utilise les types TypeScript comme une grammaire, de sorte que seuls les programmes valides se compilent. Les interfaces de programmation fluides modélisent des machines à états, chaque méthode renvoyant un type qui restreint l'état, et utilisent comme éléments constitutifs des types génériques fantômes, des jetons de types littéraux, des types conditionnels, des littéraux de modèle et des types mappés, fournissant un retour précoce dans l'éditeur.

Questions Fréquemment Posées

La leçon « Qu’est-ce qu’un DSL au niveau des types » est-elle gratuite ?

Oui — le texte complet de « Qu’est-ce qu’un DSL au niveau des types » 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 « Qu’est-ce qu’un DSL au niveau des types » ?

Utiliser les types pour restreindre une API fluide aux programmes valides. 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 1 sur 4.

Combien de temps prend la leçon « Qu’est-ce qu’un DSL au niveau des types » ?

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

  1. Qu’est-ce qu’un DSL au niveau des types
  2. Concevoir un DSL de requêtes fluide
  3. Validation des entrées à la compilation
  4. Messages d’erreur dans les DSL au niveau des types
← Retour à TypeScript Academy