【发布时间】:2021-12-08 14:36:50
【问题描述】:
我有一个枚举,其中包含我已翻译并显示在前端的一堆 API 消息:
export enum API_MESSAGES {
FAILED_TO_LOAD = 'Failed to load data',
TOKEN_INVALID = 'Token seems to be invalid',
}
我想使用来自后端的错误来获取翻译后的值:
onError: (error: AxiosError<ApiError>) => {
const errorRes = error.response?.data.error;
console.log(API_MESSAGES[errorRes])
}
但是这会引发以下 TS 错误:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof API_MESSAGES'
No index signature with a parameter of type 'string' was found on type 'typeof API_MESSAGES'
我尝试过搜索,但没有找到访问枚举的简单方法。
【问题讨论】:
-
使用类代替枚举并将其更改为对象。 export class API_MESSAGES { FAILED_TO_LOAD : '加载数据失败', TOKEN_INVALID :'令牌似乎无效', }
-
如果
error.response?.data.error不是API_MESSAGES中的键之一会发生什么? -
我知道 error.response?.data.error 可能会失败,我将为它添加一个后备
-
所以我推断您的后端不使用 Enum 定义,它发送
FAILED_TO_LOAD和TOKEN_INVALID作为实际代码。然后枚举对此没有意义:(1)它们是程序级命名常量,而不是线级值和(2)类型安全没有意义/没有强制执行,因为后端不是使用相同的枚举定义。而是使用映射对象。请参阅我的更新答案。
标签: typescript enums