我在理解如何使用枚举成员的值在 Typescript 中定义类型时遇到了麻烦。
据我了解,在 Typescript 中,您可以通过将原始对象指定为类型值来定义一元类型。并且枚举成员具有与其关联的数值。
在下面的示例中,我将枚举成员的值别名为类型
newType
。一切都有意义,除了最后一行变量 d
发生的情况。
const enum blah {
test = 1,
};
type newType = blah.test;
var a: newType = 'a'; // ERROR (Type '"a"' is not assignable to type 'blah'.)
var b: newType = blah.foo; // ERROR (Property 'foo' does not exist on type 'typeof blah'.)
var c: newType = blah.test; // WORKS
var d: newType = 123; // WORKS...???
最后一个作业没有错误。对此有何解释?
(最初的示例来自我的同事 @michaelkyriacou 在关于 Typescript 中的一元类型的讨论中。)
所有数字都可以分配给枚举成员。就像所有数字都可以分配给枚举一样。例如
const enum blah {
test = 1,
foo = 2
};
const x: blah = 567; // allowed
原因是您引用的是变量中的值。
你所做的本质上是:
let x = 1 // type of x is number, not 1
type z = typeof x // the z is of type number.