Javascript 从实例获取TypeScript枚举名称
我有以下类型脚本枚举:Javascript 从实例获取TypeScript枚举名称,javascript,reactjs,typescript,enums,Javascript,Reactjs,Typescript,Enums,我有以下类型脚本枚举: enum Country { BR = "Brazil", NO = "Norway" } 然后想象我有一个方法,它将国家作为参数,如下所示: someFunc = (country: Country): void => { console.log(country) //Will print "Brazil" if country = Country.BR console.log(Country[country]) //Same a
enum Country {
BR = "Brazil",
NO = "Norway"
}
然后想象我有一个方法,它将国家
作为参数,如下所示:
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
语句
如何获取枚举密钥
关于在枚举结构下,您会得到类似的结果
Country["BR"] = "Brazil";
Country["NO"] = "Norway";
这是一个简单的对象
默认情况下,无法获取枚举的键。但是您可以手动迭代这些键,并尝试查找该键
enum Country {
BR = "Brazil",
NO = "Norway"
}
console.log(Object.keys(Country).find(key => Country[key] === country))
我经常使用普通JavaScript对象而不是枚举,并在其键上使用
keyof
操作符进行类型安全:
const CountryMap = {
BR: "Brazil",
NO: "Norway"
};
// equivalent to: type Country = 'BR' | 'NO';
type Country = keyof typeof CountryMap;
const someFunc = (country: Country): void => {
console.log(country);
}
ts enum util
(,)支持字符串枚举的值->键的反向查找、编译时类型安全和运行时验证
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);
}
但这意味着为所有可能的值做一个if语句?为什么是if语句?你可以和你的国家相比,它不是很灵活。。。假设我的
Country
enum中有100个enum值,我的方法希望打印给定enum实例的国家代码(enum的键)。那么就没有解决这个问题的方法了?Country[key]==Country)
这句话适用于每个国家。它只获取该枚举的密钥。如果我没听错的话。啊,是的,那确实有效!希望有一个更简单的解决方案