枚举和Javascript对象的区别
你可能想知道在Javascript中使用枚举相对于使用对象有什么好处。这是因为两者都可以解决类似的问题,比如定义有限的选项数量,为本身不太清晰的值命名等。
验证
让我们看看下面使用对象的例子:
ts
const Transmission = {
Automatic: 'automatic',
Manual: 'manual',
};
Transmission.Automatic = 'electric'; // 🙃 没有验证
let transmission: string;
transmission = Transmission.Automatic; // 'automatic'
transmission = Transmission.Manual; // 'manual'
transmission = 'electric'; // 'electric' - 🙃 没有验证
从例子中可以看出,使用对象可以方便地为我们分配默认值,但它不允许我们验证分配的内容是否在先前定义的有限值内。
现在让我们看看使用枚举的例子:
ts
enum Transmission {
Automatic = 'automatic',
Manual = 'manual',
}
// ❌ 无法分配到 'Automatic',因为它是一个只读属性。
Transmission.Automatic = 'electric';
let transmission: Transmission;
transmission = Transmission.Automatic; // 'automatic'
transmission = Transmission.Manual; // 'manual'
// ❌ 类型 '"electric"' 不能分配给类型 'Transmission'
transmission = 'electric';
使用枚举时,我们将可用选项的验证委托给Typescript。这可以在开发阶段为我们提供有用的错误消息。