gpt4 book ai didi

typescript - 有什么方法可以检查对象是否是 TypeScript 中的枚举类型?

转载 作者:行者123 更新时间:2023-12-05 01:22:12 28 4
gpt4 key购买 nike

enum Direction {
Up = 1,
Down,
Left,
Right
}

if (typeof Direction === 'enum') {
// doesn't work
}

任何检查上述内容是否实际上是 enum 的方法?

最佳答案

枚举被编译成具有两种映射方式的简单对象:

name => value
value => name

因此,您示例中的枚举编译为:
var Direction;
(function (Direction) {
Direction[Direction["Up"] = 1] = "Up";
Direction[Direction["Down"] = 2] = "Down";
Direction[Direction["Left"] = 3] = "Left";
Direction[Direction["Right"] = 4] = "Right";
})(Direction || (Direction = {}));

所以 typeofDirection是普通的 "object" .
在运行时无法知道该对象是一个枚举,而不是向所述对象添加更多字段。

编辑

有时您不需要尝试使用您拥有的特定方法来解决问题,您可以更改方法。
在这种情况下,您可以使用自己的对象:
interface Direction {
Up: 1,
Down: 2,
Left: 3,
Right: 4
}
const Direction = {
Up: 1,
Down: 2,
Left: 3,
Right: 4
} as Direction;

或者:
type Direction = { [name: string]: number };
const Direction = { ... } as Direction;

然后把这个对象变成一个数组应该很简单。

关于typescript - 有什么方法可以检查对象是否是 TypeScript 中的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42006725/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com