Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从实例获取TypeScript枚举名称_Javascript_Reactjs_Typescript_Enums - Fatal编程技术网

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)
这句话适用于每个国家。它只获取该枚举的密钥。如果我没听错的话。啊,是的,那确实有效!希望有一个更简单的解决方案