TypeScript Academy · Leçon

Signatures d’index ou Record

Choisir entre les signatures d’index et le type utilitaire Record.

Leçon 4 sur 413 étapes

Signatures d’index ou Record est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.

Deux façons de typer une table

TypeScript propose deux façons courantes de décrire un dictionnaire : une signature d’index comme { [k: string]: V } et le type utilitaire intégré Record<K, V>. Ils se recouvrent largement, mais se lisent différemment.

Le type utilitaire Record

Record<K, V> construit un type d’objet dont les clés sont de type K et les valeurs de type V. Avec string comme type de clé, il est équivalent à une signature d’index de type chaîne.

type Scores = Record<string, number>
const game: Scores = { alice: 10, bob: 7 }
console.log(game.alice)

Équivalent à une signature d’index

Ces deux types décrivent la même forme. Record<string, number> et { [key: string]: number } sont interchangeables pour des clés arbitraires de type chaîne.

type A = Record<string, number>
type B = { [key: string]: number }
const a: A = { x: 1 }
const b: B = a // assignable both ways
console.log(b.x)

Record avec une union de clés littérales

La véritable puissance de Record apparaît avec une union finie de clés littérales. Il produit un objet dans lequel chaque clé listée est obligatoire — ce qu’une signature d’index ne peut pas exprimer.

type Role = "admin" | "editor" | "viewer"
type Perms = Record<Role, boolean>
const p: Perms = { admin: true, editor: true, viewer: false }
console.log(p.admin)

Les clés manquantes sont détectées

Comme chaque clé littérale est obligatoire, en oublier une provoque une erreur de compilation. Il s’agit d’une garantie forte qu’une signature d’index ne peut tout simplement pas fournir.

type Role = "admin" | "editor" | "viewer"
// const bad: Record<Role, boolean> = { admin: true, editor: true }
// Error: property viewer is missing

La signature d’index autorise toute clé

À l’inverse, une signature d’index est ouverte. Vous pouvez ajouter des clés qui n’ont jamais été mentionnées, et aucune clé n’est obligatoire.

type Open = { [key: string]: number }
const o: Open = {}      // no keys required
o.anything = 1          // any key allowed
console.log(o.anything)

Ensembles de clés finis : préférez Record

Lorsque les clés appartiennent à un ensemble fini connu, Record avec une union littérale est plus clair et plus sûr. Il documente exactement les clés qui existent et impose leur présence complète.

type Direction = "north" | "south" | "east" | "west"
type Moves = Record<Direction, number>
const m: Moves = { north: 1, south: 0, east: 2, west: 0 }
console.log(m.east)

Ensembles de clés ouverts : les deux conviennent

Lorsque les clés sont illimitées et découvertes à l’exécution, Record<string, V> et une signature d’index conviennent tous les deux. De nombreuses équipes choisissent Record pour sa concision, tandis que d’autres préfèrent la signature pour son caractère explicite.

type Cache1 = Record<string, string>
type Cache2 = { [url: string]: string }
const c: Cache1 = {}
c["/home"] = "<html>"
console.log(c["/home"])

Record est simplement un type mappé

En interne, Record<K, V> est défini comme un type mappé : { [P in K]: V }. Le savoir explique pourquoi une union littérale produit des clés obligatoires, tandis que string produit une signature d’index.

// lib definition (simplified):
// type Record<K extends string | number | symbol, V> = { [P in K]: V }
type Flags = Record<"a" | "b", boolean>
const f: Flags = { a: true, b: false }
console.log(f.a)

Clés nommées et clé de secours

Une signature d’index peut associer une clé de secours à des clés fixes dans une même interface — ce qui est pratique lorsque vous avez besoin des deux. Record seul ne peut pas combiner aussi clairement des clés nommées obligatoires avec une clé de secours ouverte.

interface Response {
  status: number
  [header: string]: number | string
}
const r: Response = { status: 200, "x-id": "abc" }
console.log(r.status)

Choisir en pratique

Règle générale : clés finies et connues → Record<Union, V> pour vérifier qu’elles sont toutes présentes. Clés illimitées → l’une ou l’autre forme. Besoin de clés nommées et d’une clé de secours → signature d’index dans une interface.

type Status = "ok" | "error"
type Messages = Record<Status, string>
const msg: Messages = { ok: "done", error: "failed" }
console.log(msg.ok)

Vérification rapide

Évaluez votre compréhension de Record et des signatures d’index.

Récapitulatif

Record<string, V> équivaut à une signature d’index de type chaîne, mais Record associé à une union de clés littérales rend chaque clé listée obligatoire et détecte les omissions lors de la compilation. Utilisez Record<Union, V> pour les ensembles finis de clés connues, l’une ou l’autre forme pour les clés illimitées, et une signature d’index lorsque vous avez besoin de clés nommées avec une clé de secours. En interne, Record est le type mappé { [P in K]: V }.

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 « Signatures d’index ou Record » est-elle gratuite ?

Oui — le texte complet de « Signatures d’index ou Record » 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 « Signatures d’index ou Record » ?

Choisir entre les signatures d’index et le type utilitaire Record. 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 4 sur 4.

Combien de temps prend la leçon « Signatures d’index ou Record » ?

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. Définir des signatures d’index
  2. Signatures d’index de chaînes et de nombres
  3. Combiner clés connues et dynamiques
  4. Signatures d’index ou Record
← Retour à TypeScript Academy