Signatures d’index ou Record
Choisir entre les signatures d’index et le type utilitaire Record.
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 missingLa 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 }.
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
- Définir des signatures d’index
- Signatures d’index de chaînes et de nombres
- Combiner clés connues et dynamiques
- Signatures d’index ou Record