如何解决如何通过在Typescript中提供其名称作为参数来获取Enum值
我正在SO资源中寻找类似的案例,但是找不到相似的主题,所以我将问题发布在这里。
ie我要将“ ResetPasswordUrl”作为参数传递,我想返回此“ // a [contains(@href,'reset-password')] / @ href”表达式作为结果
enum CustomXPathExpressions {
ResetPasswordUrl = "//a[contains(@href,'reset-password')]/@href",OtherExpression = "//div" }
public getCustomExpressionValue(option: CustomXPathExpressions ) {
return here
}
解决方法
return option.valueOf();
会做您想实现的事情。
如果getCustomExpressionValue()
确实以"ResetPasswordUrl"
作为输入,则option
的类型不是CustomXPathExpressions
。
TypeScript中有些令人困惑的情况,其中有名为 types (仅在设计时存在)和名为 values (在运行时存在),您可以具有名为Foo
的类型和名为Foo
的值,它们不必彼此关联。当您编写enum Bar { k1="v1",k2="v2" }
时,会引入一个名为Bar
的 value ,它是带有属性键k1
和k2
的枚举对象,其属性值为{{ 1}}和v1
。您还引入了名为v2
的 type ,它是枚举对象的属性值的类型的并集,例如Bar
。我有another answer对此进行了详尽的介绍。
无论如何,类型"v1" | "v2"
是枚举的属性值的类型,而不是CustomXPathExpressions
的类型。要获取密钥的类型,您需要property key
。这意味着您将返回枚举值,类型为keyof typeof CustomXPathExpressions
。因此您的函数应如下所示:
CustomXPathExpression
您可以验证它是否有效:
function getCustomExpressionValue(
option: keyof typeof CustomXPathExpressions
): CustomXPathExpressions {
return CustomXPathExpressions[option];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。