Analyser avec les littéraux de modèles
Extraire des données structurées de chaînes avec infer.
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'>; // falseSegments 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 itPourquoi 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 levelVé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
infercapturent des champs nommés dans un seul motif. - Les parties inférées peuvent être rétrécies avec
extendsdirectement 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.
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
- Concepts des combinateurs d’analyse
- Découpage de chaînes au niveau des types
- Analyser avec les littéraux de modèles
- Mini-analyseur de routes au niveau des types