如何通过变量动态访问枚举类型?
枚举动态访问的可行性及解决方案
你写的var mytype = EventType.event这种方式完全不可行。原因是枚举的点语法(.)只能访问字面量命名的成员,这里的event会被当作枚举的成员名来解析,但你的EventType里根本没有名为event的成员,自然无法拿到想要的fire枚举值。
要实现动态访问枚举成员,需要用方括号语法,结合类型断言(TypeScript环境下)来处理,示例如下:
enum EventType { earthquake, flood, fire } var event = "fire"; // 先校验输入的字符串是否是枚举的有效成员,避免报错 if (event in EventType) { // 通过方括号+类型断言动态访问 var mytype = EventType[event as keyof typeof EventType]; console.log(mytype); // 输出2(默认枚举值从0自增) } else { console.log("输入的事件类型无效"); }
如果是在纯JavaScript环境中(用对象模拟枚举),可以直接用EventType[event]访问,但要注意提前校验字符串的合法性,避免访问到undefined。
内容的提问来源于stack exchange,提问作者mana
相关产品推荐
相关产品推荐

