从实例中获取 TypeScript 枚举名称

新手上路,请多包涵

我有以下 TypeScript 枚举:

 enum Country {
    BR = "Brazil",
    NO = "Norway"
}

然后想象我有一个方法将 Country 作为参数,如下所示:

 someFunc = (country: Country): void => {
    console.log(country) //Will print "Brazil" if country = Country.BR
    console.log(Country[country]) //Same as above
    console.log(???) //I want to print "BR" if country = Country.BR
}

如何解决第三个 console.log 语句?

我如何获得枚举密钥?

问候

原文由 Robin Jonsson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 453
2 个回答

在枚举结构下你会得到这样的东西

Country["BR"] = "Brazil";
Country["NO"] = "Norway";

这是一个简单的对象。

默认情况下,您无法获取枚举的键。但是您可以手动遍历键并尝试找到那个键。

 enum Country {
    BR = "Brazil",
    NO = "Norway"
}

console.log(Object.keys(Country).find(key => Country[key] === country))

原文由 Suren Srapyan 发布,翻译遵循 CC BY-SA 3.0 许可协议

ts-enum-util ( github , npm ) 支持反向查找值->字符串枚举的键、编译时类型安全和运行时验证。

 import {$enum} from "ts-enum-util";

enum Country {
    BR = "Brazil",
    NO = "Norway"
}

someFunc = (country: Country): void => {
    // throws an error if the value of "country" at run time is
    // not "Brazil" or "Norway".
    // type of "name": ("BR" | "NO")
    const name = $enum(Country).getKeyOrThrow(country);
}

原文由 Jeff Lau 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题