Une index signature décrit le type de propriétés quand vous ne connaissez pas leurs noms à l'avance — modélisation de dictionnaires/maps où les clés sont dynamiques.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Une index signature décrit le type de propriétés quand vous ne connaissez pas leurs noms à l'avance — modélisation de dictionnaires/maps où les clés sont dynamiques.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Avec une index signature ordinaire, le compilateur suppose que chaque clé existe, donc scores.typo est typé comme number même s'il est en réalité undefined à l'exécution. L'activation de noUncheckedIndexedAccess corrige cela :
// with noUncheckedIndexedAccess: true
scores.math; // number | undefined → forces you to handle the missing case
interface Config {
name: string; // known property
[key: string]: string | number; // plus arbitrary extra keys
}
Toutes les propriétés nommées doivent être assignables au type de valeur de l'index signature.
type Scores = Record<string, number>; // same as the index signature
type Roles = Record<"admin" | "user", boolean>; // constrained keys
Record est le raccourci idiomatique et supporte une union de clés restreinte, ce qu'une simple [key: string] ne peut pas.
Les index signatures modélisent les objets véritablement à clés dynamiques (tables de recherche, caches, maps JSON analysées).
Connaissez la mise en garde de sécurité (noUncheckedIndexedAccess) et préférez Record<K, V> pour la lisibilité — et préférez une Map quand les clés sont vraiment ouvertes et que vous voulez une vraie sémantique d'itération/taille.
Une bibliothèque de questions d'entretien IT avec des réponses détaillées — du Junior au Senior.
Faire un don