0Pricing
TypeScript Academy · Leçon

Métadonnées des décorateurs

Associer et lire des métadonnées avec l’API de métadonnées.

Métadonnées des décorateurs est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.

L’API de métadonnées des décorateurs

Les décorateurs standardisés incluent un canal intégré de métadonnées. L’objet de contexte expose un objet metadata dans lequel vous pouvez écrire, et la classe le porte ensuite sous la clé bien connue Symbol.metadata.

context.metadata

Chaque contexte de décorateur partage un seul objet metadata pour la classe en cours de définition. Les décorateurs y attachent des données ; celui-ci devient les métadonnées de la classe.

function tag(label: string) {
  return function (value: any, context: DecoratorContext) {
    context.metadata[context.name] = label;
  };
}

Lecture via Symbol.metadata

Une fois la classe définie, les métadonnées collectées sont accessibles à SomeClass[Symbol.metadata].

class User {
  @tag("identifier") id = 0;
  @tag("display")    name = "";
}

const meta = (User as any)[Symbol.metadata];
console.log(meta); // { id: "identifier", name: "display" }

Pourquoi un objet partagé

Comme tous les décorateurs d’une classe écrivent dans le même objet metadata, vous pouvez regrouper les informations provenant de nombreux décorateurs dans un enregistrement cohérent décrivant la classe.

Stockage de métadonnées structurées

Les valeurs des métadonnées peuvent avoir n’importe quelle forme. Une pratique courante consiste à conserver un enregistrement imbriqué indexé par le nom du membre.

function column(type: string) {
  return function (value: any, context: ClassFieldDecoratorContext) {
    const md = context.metadata as any;
    md.columns ??= {};
    md.columns[context.name] = { type };
  };
}

Métadonnées au niveau de la classe

Un décorateur de classe peut également écrire des métadonnées, par exemple un nom de table qui complète les informations de colonne propres à chaque champ.

function entity(table: string) {
  return function (value: Function, context: ClassDecoratorContext) {
    (context.metadata as any).table = table;
  };
}

@entity("users")
class UserEntity {
  @column("serial") id = 0;
  @column("text")   name = "";
}

Héritage des métadonnées

Les objets de métadonnées sont liés le long de la chaîne des prototypes : l’objet de métadonnées d’une sous-classe a pour prototype les métadonnées du parent, de sorte que les entrées héritées restent visibles tant qu’elles ne sont pas remplacées.

Polyfill de Symbol.metadata

Symbol.metadata est un symbole bien connu. Dans les environnements qui ne le prennent pas en charge, vous affectez un polyfill afin que l’environnement d’exécution puisse associer l’objet collecté.

(Symbol as any).metadata ??= Symbol.for("Symbol.metadata");

Métadonnées sans reflect-metadata

Cette API fait partie de la proposition relative aux décorateurs elle-même ; elle ne nécessite donc pas la bibliothèque distincte reflect-metadata. Cette bibliothèque reste pertinente uniquement pour l’ancienne émission expérimentale des types de conception (leçon suivante).

Un assistant pratique pour la lecture

Un petit accesseur centralise la lecture des métadonnées d’une classe quelconque et renvoie un objet vide lorsqu’il n’en existe aucune.

function getMeta(cls: any): Record<string, any> {
  return (cls[Symbol.metadata] as Record<string, any>) ?? {};
}

Pourquoi c’est important

Les métadonnées transforment les décorateurs, qui ne sont plus de simples enveloppes de comportement ponctuelles, en une description déclarative de vos classes. Les cadres lisent cette description pour créer des mappages objet-relationnel, des validateurs et des routeurs sans recourir à des astuces de réflexion à l’exécution.

Vérification rapide

Confirmez votre compréhension de l’API des métadonnées.

Récapitulatif

L’API des métadonnées des décorateurs fournit à chaque décorateur un objet context.metadata partagé, exposé sur la classe via Symbol.metadata. Les décorateurs accumulent des métadonnées structurées et héritables sans bibliothèque externe, ce qui permet de décrire les classes de manière déclarative et adaptée aux cadres.

Questions Fréquemment Posées

La leçon « Métadonnées des décorateurs » est-elle gratuite ?

Oui — le texte complet de « Métadonnées des décorateurs » 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 « Métadonnées des décorateurs » ?

Associer et lire des métadonnées avec l’API de métadonnées. 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 2 sur 4.

Combien de temps prend la leçon « Métadonnées des décorateurs » ?

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. Les décorateurs de l’étape 3 expliqués
  2. Métadonnées des décorateurs
  3. reflect-metadata et types de conception
  4. Construire un cadre de décorateurs
← Retour à TypeScript Academy