TypeScript Academy · Leçon

Analyser avec les littéraux de modèles

Extraire des données structurées de chaînes avec infer.

Leçon 3 sur 413 étapes

Analyser avec les littéraux de modèles 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.

Du découpage à la structure

Le découpage fournit un tuple de parties. L’analyse va plus loin : elle extrait des données nommées et structurées d’un type de chaîne. Nous utilisons des motifs de littéraux de modèle avec plusieurs variables infer pour extraire les éléments qui nous intéressent.

Notation : en TypeScript réel, les types littéraux de modèle s’écrivent avec des chaînes délimitées par des accents graves contenant des emplacements dollar-accolade. Dans ces extraits, nous représentons ce motif sous la forme Tpl<...>, en indiquant chaque partie dans l’ordre ; par exemple, un modèle avec accent grave correspondant au préfixe littéral puis à Rest apparaît sous la forme Tpl<'prefix', infer Rest>.

type KeyValue<S> =
  S extends Tpl<infer K, '=', infer V> ? { key: K; value: V } : never;
// Tpl<K, '=', V> matches K, an equals sign, then V

type X = KeyValue<'name=alice'>; // { key: 'name'; value: 'alice' }

Plusieurs points d’inférence

Un seul motif peut capturer plusieurs champs à la fois. Pour analyser "GET /users", inférez la méthode et le chemin dans un même type conditionnel.

type Request<S> =
  S extends Tpl<infer Method, ' ', infer Path>
    ? { method: Method; path: Path }
    : never;
// Tpl<Method, ' ', Path> matches the method, a space, then the path

type X = Request<'GET /users'>; // { method: 'GET'; path: '/users' }

Rétrécir les parties inférées

Vous pouvez contraindre une variable inférée avec extends directement dans le motif, afin qu’elle ne corresponde qu’à certaines formes. Ici, la méthode doit être un verbe connu.

type Method = 'GET' | 'POST';
type Parse<S> =
  S extends Tpl<(infer M extends Method), ' ', infer P>
    ? { method: M; path: P }
    : never;
// the inferred M is constrained to Method inside the template pattern

type X = Parse<'POST /x'>; // { method: 'POST'; path: '/x' }

Analyser des paires clé-valeur

Combinez découpage et analyse : découpez une chaîne de requête en paires, puis analysez chaque paire pour en extraire une clé et une valeur. Le résultat est un tuple d’éléments structurés.

type Pair<S> =
  S extends Tpl<infer K, '=', infer V> ? [K, V] : [S, ''];
// Tpl<K, '=', V> splits a 'key=value' string literal type

type X = Pair<'page=2'>; // ['page', '2']

Construire un objet à partir de paires

Réduisez un tuple de paires clé-valeur en un type objet à l’aide d’un accumulateur de type mappé et d’intersections. Chaque paire ajoute une propriété.

type FromPairs<T extends [string, string][]> =
  T extends [[infer K extends string, infer V], ...infer R extends [string, string][]]
    ? { [P in K]: V } & FromPairs<R>
    : {};

type X = FromPairs<[["a", "1"], ["b", "2"]]>; // { a: "1" } & { b: "2" }

Analyser une chaîne de requête

Assemblez le tout : découpez sur "&", analysez chaque élément sur "=", puis construisez l’objet. Le compilateur connaît désormais les clés exactes d’un littéral de chaîne de requête.

type ParseQuery<S extends string> =
  FromPairs<{ [I in keyof SplitAmp<S>]: Pair<SplitAmp<S>[I] & string> }>;
// where SplitAmp splits on "&" (from previous lesson)

Extraire des nombres

Les parties inférées sont toujours des types littéraux de chaîne. Pour traiter une partie comme un nombre, vérifiez qu’elle correspond à un motif numérique ou faites-la passer par une contrainte composée uniquement de digits. La valeur reste un type littéral.

type IsNumeric<S extends string> =
  S extends Tpl<number> ? true : false;
// Tpl<number> is a template literal type that matches any numeric string

type X = IsNumeric<'42'>; // true
type Y = IsNumeric<'4a'>; // false

Segments facultatifs

Utilisez une union de motifs pour gérer les parties facultatives. Essayez d’abord le motif le plus riche ; utilisez la solution de repli plus simple s’il ne correspond pas.

type ParsePath<S> =
  S extends Tpl<infer Base, '?', infer Query>
    ? { base: Base; query: Query }
    : { base: S; query: '' };
// Tpl<Base, '?', Query> matches an optional query after a question mark

type X = ParsePath<'/x?a=1'>; // { base: '/x'; query: 'a=1' }

Espaces et cas particuliers

Les chaînes réelles contiennent des espaces superflus. Composez votre analyseur avec Trim de la leçon précédente afin que les espaces initiaux et finaux ne déforment pas les champs extraits.

type CleanKey<S extends string> = Trim<S>;
// Apply Trim to each inferred segment before using it

Pourquoi est-ce puissant

L’analyse par littéraux de modèle permet au compilateur de comprendre des formats : dates, routes, clés d’environnement et fragments SQL. Les chaînes mal écrites deviennent des erreurs de compilation, et les types en aval peuvent dépendre de la structure analysée. Le littéral de chaîne devient une valeur typée.

type Event<S> =
  S extends Tpl<infer Domain, ':', infer Action>
    ? { domain: Domain; action: Action }
    : never;
// Tpl<Domain, ':', Action> matches 'domain:action'
type X = Event<'user:created'>; // { domain: 'user'; action: 'created' }

Composer des analyseurs

Tout comme les combinateurs au niveau des valeurs, les analyseurs au niveau des types se composent. Découpez, analysez chaque partie, puis assemblez un objet. Chaque étape est un petit type conditionnel ; ensemble, ils forment un analyseur complet et typé.

// Split -> Pair -> FromPairs is a parser pipeline at the type level

Vérification rapide

Testez votre compréhension de l’analyse par littéraux de modèle.

Récapitulatif

Vous avez extrait des données structurées à partir de types de chaînes.

  • Plusieurs points infer capturent des champs nommés dans un seul motif.
  • Les parties inférées peuvent être rétrécies avec extends directement dans le motif.
  • Split, Pair et FromPairs se composent pour former un analyseur de chaînes de requête.
  • Trim et les vérifications numériques gèrent les cas particuliers.

Ensuite : un analyseur de routes miniature complet.

Gratuit pour commencer

Apprends TypeScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
101
Leçons
352

Questions Fréquemment Posées

La leçon « Analyser avec les littéraux de modèles » est-elle gratuite ?

Oui — le texte complet de « Analyser avec les littéraux de modèles » 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 « Analyser avec les littéraux de modèles » ?

Extraire des données structurées de chaînes avec infer. 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 « Analyser avec les littéraux de modèles » ?

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. Concepts des combinateurs d’analyse
  2. Découpage de chaînes au niveau des types
  3. Analyser avec les littéraux de modèles
  4. Mini-analyseur de routes au niveau des types
← Retour à TypeScript Academy