为什么我可以为TypeScript枚举分配明确的超出范围的值?

时间:2017-12-15 17:06:54

标签: typescript enums

为什么允许使用这段TypeScript代码:

const enum Foobar {
    Foo = 0,
    Bar = 1
}

let a: Foobar = 42;
const b: 42 = 42;
a = b;

我知道枚举可以是动态的。但我觉得不应该使用TypeScript控制流分析来允许这个例子。

1 个答案:

答案 0 :(得分:2)

这是允许的,因为TS不区分bitflag和非bitflag枚举。

超出范围的值通常出现在bitflag枚举中:

const enum Foobar {
  Foo = 0,
  Bar = 1,
  Baz = 2,
  Qoo = 4
}

let a: Foobar = Foobar.Qoo | Foobar.Baz;

在这里,a显然具有值6,但这并不明显违反枚举的意图。