将枚举值作为类型的意外行为(在Typescript中)

时间:2017-06-20 16:52:22

标签: typescript types enums

我很难理解枚举成员的值可用于在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,讨论的是关于打字稿的一元类型。)

2 个答案:

答案 0 :(得分:1)

所有号码都可以分配给枚举成员。就像所有数字都可以分配给枚举一样。例如

const enum blah {
    test = 1,
    foo = 2
};

const x: blah = 567; // allowed

答案 1 :(得分:0)

原因是你指的是变量中的值。

你在做什么本质上是:

let x = 1 // type of x is number, not 1
type z = typeof x // the z is of type number.