以枚举值作为类型的意外行为(在 Typescript 中)[重复]

问题描述 投票:0回答:2

我在理解如何使用枚举成员的值在 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 中的一元类型的讨论中。)

typescript types enums
2个回答
1
投票

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

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

const x: blah = 567; // allowed

0
投票

原因是您引用的是变量中的值。

你所做的本质上是:

let x = 1 // type of x is number, not 1
type z = typeof x // the z is of type number.
© www.soinside.com 2019 - 2024. All rights reserved.