如何通过在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 ,它是带有属性键k1k2的枚举对象,其属性值为{{ 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];
}

Playground link to code