查看示例:
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]
});
即使指定了对象必须并且只能 具有枚举中指定的键,当获取对象的键时,每个键的类型只是string
,而不是Fruits
。为什么会这样呢?除了Fruits
之外,我想不出任何“虫洞”。我的意思是像Object.defineProperty
或Object.assign
这样肮脏的东西可以完成工作,而TypeScript不会抱怨它,但是它只在乎类型呢?例如,我可以使用以下方法解决上述问题:
const isTheSame = (Object.keys(Fruits) as Fruits[]).every(fruit => {
newCount[fruit] === lastCount[fruit]
});
但是,如果我定义对象的类型,一开始应该是这样吗?