解决Object.keys之后遍历的key是string类型而不是对象的属性key导致的警告
前言
当我们使用Object.keys
获取某个对象的key数组的时候,ts推导出来的类型是string[]
,当我们再通过forEach
去遍历这个key数组时,由于string类型与对象具体的key不一致,导致报错:素隐式具有 "any" 类型,因为类型为 "string" 的表达式不能用于索引类型。
我感觉ts这里的推导能力太差了,明明已经把具体的对象传递给他了,结果它直接返回一个string[]
类型来一劳永逸,导致后续通过string类型去拿对象的value,就导致类型不匹配了。
解决办法
以前的我会这样写:
const kindMap = {
balance: 1,
gpu: 2
};
Object.keys(form.value).forEach((key) => {
const k = key as keyof typeof kindMap;
const value = kindMap[k];
})
使用一个变量来as指定类型,因为key在函数参数上并不方便as
重新声明。
最近又想到了一个新办法,没必要声明一个新的变量了。
const kindMap = {
balance: 1,
gpu: 2
};
(Object.keys(form.value) as Array<keyof typeof kindMap>).forEach((key) => {
const value = kindMap[key];
})
这样也可以,我们重新将Object.keys
得到的数组重新as一下类型即可,这种方式相对来说更加优雅。
分类:
TypeScript
标签:
类型TypeScriptObject.keys
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据