js中对象的键值对形式配合动态key常用于策略模式,减轻代码的if,else使用,但在ts中使用时有小小的坑。下文记录今日遇到的小问题:
//定义错误信息映射
const errMap = {
"401": "未授权",
"404": "找不到请求地址",
"500": "服务器错误"
}
let code = 500//假装是后端返回的code
console.log(errMap[code])//假装是UI组件的message提示框
//输出:服务器错误
上面的代码在js中运行没任何毛病,但在ts编译时则会出现如下报错:
解决方案:定义接口,并给对象key进行断言。
interface ErrMap {
401: string
404: string
500: string
}
const errMap: ErrMap = {
"401": "未授权",
"404": "找不到请求地址",
"500": "服务器错误",
}
let code = 500
console.log(errMap[code as keyof ErrMap])