interface AgeMap {
[name: string]: number
}
const friendsAges: AgeMap = {
"Sandy": 34,
"Joe": 28,
"Sarah": 30,
"Michelle": "fifty", // ERROR! Type 'string' is not assignable to type 'number'.
};
Ici, l'interface AgeMapapplique les clés sous forme de chaînes et les valeurs sous forme de nombres. Le mot-clé namepeut être n'importe quel identifiant et doit être utilisé pour suggérer la syntaxe de votre interface / type.
Vous pouvez utiliser une syntaxe similaire pour imposer qu'un objet possède une clé pour chaque entrée d'un type d'union:
type DayOfTheWeek = "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday";
type ChoresMap = { [day in DayOfTheWeek]: string };
const chores: ChoresMap = { // ERROR! Property 'saturday' is missing in type '...'
"sunday": "do the dishes",
"monday": "walk the dog",
"tuesday": "water the plants",
"wednesday": "take out the trash",
"thursday": "clean your room",
"friday": "mow the lawn",
};
Vous pouvez bien sûr en faire également un type générique!
type DayOfTheWeek = "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday";
type DayOfTheWeekMap<T> = { [day in DayOfTheWeek]: T };
const chores: DayOfTheWeekMap<string> = {
"sunday": "do the dishes",
"monday": "walk the dog",
"tuesday": "water the plants",
"wednesday": "take out the trash",
"thursday": "clean your room",
"friday": "mow the lawn",
"saturday": "relax",
};
const workDays: DayOfTheWeekMap<boolean> = {
"sunday": false,
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": false,
};
Mise à jour du 10.10.2018:
Découvrez la réponse de @ dracstaxi ci-dessous - il y a maintenant un type intégré Recordqui fait la plupart de cela pour vous.
Mise à jour 1.2.2020:
j'ai entièrement supprimé les interfaces de mappage prédéfinies de ma réponse. La réponse de @ dracstaxi les rend totalement hors de propos. Si vous souhaitez toujours les utiliser, consultez l'historique des modifications.