【发布时间】:2021-07-09 16:49:12
【问题描述】:
我仍然不确定如何理解 typescript 枚举。
考虑一下:
enum Int { a, b };
const array: Int[] = [];
array.push(Int.a); // ok
array.push(0); // same
array.push(1); // this is b
array.push(123); // works
array.push(-3e6); // also works
所以任何number 都与Int 兼容??
我知道我可以动态检查,因为 enum 声明也会生成一个对象声明,除非我们使用 const enum。但我预计静态类型为0 | 1 而不是number。
现在是字符串枚举:
enum Str { a = 'a', b = 'b' };
const array: Str[] = [];
array.push(Str.a); // ok
array.push('a'); // fails
所以从前面的例子来看,人们可能认为Str 将与string 兼容,但不是。它与"a" | "b" 的事件不兼容。
有人能帮我理解吗?
具体来说,我正在研究为什么事情会这样工作的一些见解,有没有办法让编译器为我们检查事情?
【问题讨论】:
-
只是为了好玩-使用
type IntKeys = keyof Int; type NumberKeys = keyof number;表明数字枚举键确实是数字,这些类型是相同的;)
标签: typescript enums