У меня есть объект, который использует enum
значения в качестве ключей. Я хотел бы повторить эти enum
значения и использовать их для индексации указанного объекта:
enum Foods {
bread = "bread",
meat = "meat",
}
type ShoppingList = {
[Foods.bread]: string;
[Foods.meat]: string;
};
const shoppingList: ShoppingList = {
bread: "1 loaf",
meat: "2 lbs",
};
Object.keys(Foods).forEach((item) => {
console.log(shoppingList[item]);
});
Этот делает сборку с tsc
, но ts-node
и VS Code оба сообщают:
error TS7053: Element implicitly has an 'any' type because expression of type
'string' can't be used to index type 'ShoppingList'. No index signature with
a parameter of type 'string' was found on type 'ShoppingList'.
17 console.log(shoppingList[item]);
~~~~~~~~~~~~~~~~~~
Понятно, потому что Object.keys
возвращает string[]
. Однако мы с вами знаем, что эти строки будут только членами Foods
. И поскольку ShoppingList
только использует Foods
в качестве ключей, мы должны иметь возможность использовать любой член Object.keys
для индексации shoppingList
.
Это имеет смысл концептуально, но как Могу ли я сообщить об этом TypeScript?
Edit : Foods
и ShoppingList
должны придерживаться этих двух значений, т.е. здесь нет ключей Dynami c.