Record<Keys, Type>
Crée un type d’objet avec des clés données, où chaque valeur a le même type.
Exemple
#type Course = 'html' | 'javascript' | 'python'
const modules: Record<Course, number> = {
html: 11,
javascript: 16,
python: 12
}
const total = Object.values(modules).reduce((sum, n) => sum + n, 0)
console.log(total)39
Définition et utilisation
#Record<Keys, Type> décrit un objet dont les clés appartiennent au type Keys, et dont toutes les valeurs ont le type Type. Record<string, number> est un dictionnaire de nombres, et Record<"html" | "css", number> un objet avec exactement deux champs.
Avec une union de littéraux comme clés, le compilateur exige tous les champs. Si vous ajoutez une nouvelle variante à l’union, chaque Record utilisant cette union signale un champ manquant, ce qui aide à garder la cohérence.
C’est une alternative plus lisible à la signature d’index { [key: string]: T }, et le type de référence pour les tables de configuration, les traductions ou les compteurs.
Syntaxe
#type New = Record<Keys, ValueType>Paramètres de type
#Keys
string, number, symbol ou union de littéraux
Les clés autorisées.Type
type quelconque
Le type de chaque valeur.
Plus d’exemples
#const labels: Record<Course, string> = { html: 'HTML et CSS', python: 'Python' }
// Erreur : Property 'javascript' is missing in type '{ html: string; python: string; }'.Bonnes pratiques
#- Avec des clés issues d’une union de littéraux,
Recordveille à l’exhaustivité. C’est idéal pour les tables de libellés et de couleurs. - Pour des dictionnaires à clés inconnues, envisagez
Map, qui gère mieux les ajouts et suppressions fréquents.
Entrées associées
#- Signature d’indexUne description des objets à clés arbitraires et à valeurs d’un seul type.
- Pick<Type, Keys>Crée un type contenant uniquement les propriétés sélectionnées d’un autre type.
- Types mappésCréent un nouveau type d’objet en transformant chaque clé d’un autre type.
- keyofCrée une union des noms de clés d’un type d’objet donné.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.