См. Пример:
enum Fruits {
Apple = 'apple',
Banana = 'banana',
}
type FruitCounts = {
[Fruits.Apple]: number;
[Fruits.Banana]: string;
};
const lastCount: FruitCounts = {
[Fruits.Apple]: 10,
[Fruits.Banana]: '1.2kg'
};
const newCount: FruitCounts = {
[Fruits.Apple]: 12,
[Fruits.Banana]: '1.4kg'
};
const isTheSame = Object.keys(lastCount).every(fruit => {
newCount[fruit] === lastCount[fruit]
});
Детская площадка
Даже если указано, что объекты должны и могут только имеют указанные ключи из enum, при получении ключей объекта тип каждой клавиши просто string
, а не Fruits
. Почему это так? Я не могу думать ни о каких «червоточинах», как ключ объекта может отличаться от Fruits
. Я имею в виду грязные вещи, такие как Object.defineProperty
, или Object.assign
, которые могут выполнить работу, и TypeScript не будет жаловаться на это, но он предназначен только для того, чтобы заботиться о типах, верно? Например, я мог бы исправить вышеуказанную проблему с помощью:
const isTheSame = (Object.keys(Fruits) as Fruits[]).every(fruit => {
newCount[fruit] === lastCount[fruit]
});
Но если я определю тип объектов, это должно изначально быть так?