如何在打字稿中获取枚举的最小值/最大值
我在打字稿中有一个枚举,类似于下面的内容:
const enum ControlId {
ZoomIn = 600,
ZoomOut,
Close,
Open,
....
}
给定数字,我想知道它是否在ControlID范围内,即[600,?],以便我知道它是否属于ControlID类别或不。我想知道是否有办法做到这一点。谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您是说您有一个运行时值,您想知道它是否是
ControlID
的有效成员(您已经说过要进行“范围检查”,但是数字枚举不一定是连续)。const Enum
没有运行时的存在,因此您无法编写运行时代码来验证一个数字以查看它是否是const enum enum
的有效成员。如果
enum
不是const
:我可以做到这一点,您可以做到这一点:我已经将其作为类型的断言函数完成内联表达。基本上,如果值为数字,并且该值(当转换为字符串时,由运算符中隐式> operator中隐式)是
ControlIDID
的有效属性名称,则是有效的成员ControlID
如果您确实是指最小/最大,即使不能保证枚举值是连续的,您也可以这样做:
(对于
e
可能有更好的类型代码>对象。从您传递的对象中获取所有键和阵列的最后一个元素。
另外,使用
Math.min
和MATH.MAX
而不是排序:Playground link
I think you're saying you have a runtime value and you want to know if it's a valid member of
ControlId
(you've said you want a "range check," but numeric enums aren't necessarily contiguous).A
const enum
has no runtime existence, so you can't write runtime code to validate a number to see if it's a valid member of aconst enum
.You can do it if the
enum
isn'tconst
:There I've done it as a type assertion function, but that could be a type guard function instead, or just an inline expression. Basically, if the value is a number, and the value (when converted to string, implicitly by the
in
operator) is a valid property name forControlId
, it's a valid member ofControlId
.If you really mean you want the min/max, even though the enum values are not guaranteed to be contiguous, you can do that like this:
(There's probably some better type for
e
thanobject
. And in modern environments,values[values.length - 1]
could bevalues.at(-1)
.)That gets all of the keys from the object you pass in, converts them to number if possible, removes the ones that didn't convert successfully (so now we have an array of enum values), sorts the resulting array, and returns the first and last elements of the array.
Alternatively, use
Math.min
andMath.max
instead of sorting:Playground link