我有一个枚举:
export enum ApiMessages {
logged_ok = 'Logged OK',
register_ok = 'Register OK'
}
我有一个enum作为参数的函数:
export function responseOK(message: ApiMessages, result ?: any): ApiResponse {
return {
"status": "ok",
"code": 200,
"messageId": ApiMessages[message], <-- KO TS7015
"message": message,
"result": result
};
}
我正在调用这样的函数:
responseOK(ApiMessages.logged_ok, {user: userRes})
我试图将枚举键和枚举字符串值返回给响应,但我得到TS错误:
TS7015:元素隐式具有“任意”类型,因为索引表达式不是“数字”类型。
我有严格的TypeScript配置。添加suppressImplicitAnyIndexErrors不是一个选项。
TypeScript版本:2.9.2
如handbook所述:
请记住,字符串枚举成员根本不会生成反向映射。
这意味着在您的情况下没有简单的反向映射。
要通过它的值获取枚举成员的键,您必须遍历枚举键并将关联值与目标值进行比较。
function getEnumKeyByEnumValue(myEnum, enumValue) {
let keys = Object.keys(myEnum).filter(x => myEnum[x] == enumValue);
return keys.length > 0 ? keys[0] : null;
}
下面是一些演示代码。你也可以see it in action on the TypeScript Playground
enum ApiMessages {
logged_ok = 'Logged OK',
register_ok = 'Register OK'
}
let exampleValue = ApiMessages.logged_ok;
let exampleKey = getEnumKeyByEnumValue(ApiMessages, exampleValue);
alert(`The value '${exampleValue}' has the key '${exampleKey}'`)
function getEnumKeyByEnumValue(myEnum, enumValue) {
let keys = Object.keys(ApiMessages).filter(x => myEnum[x] == enumValue);
return keys.length > 0 ? keys[0] : null;
}
将此添加到您的responseOK()
中,您最终得到:
function responseOK(message: ApiMessages, result ?: any) {
return {
"status": "ok",
"code": 200,
"messageId": getEnumKeyByEnumValue(ApiMessages, message),
"message": message,
"result": result
};
}