1 问题
有如下一段代码:
const obj = {
a: 1,
b: 2
}
const objValueList = Object.keys(obj).map(it => {
return obj[it]
})
看起来没什么问题,但是在ts环境下会报错:
这是因为这里的obj的key并没有声明对象,而Object.keys()访问对象返回的是string,两者不匹配,导致报错;
2 解决方案
2.1 解法1
避免使用类型推断,为obj声明一个interface类型,指定key为string
const obj: {
[propsName: string]
} = {
a: 1,
b: 2
}
const objValueList = Object.keys(obj).map(it => {
return obj[it]
})
2.2 as keyof
在遍历访问obj的同时,也遍历访问obj的类型:
interface IObj = {
a: number,
b: number
}
const obj: IObj = {
a: 1,
b: 2
}
type TObjKeys = keyof IObj;
const objValueList = (Object.keys(obj) as TObjKeys[]).map(it => {
return obj[it]
})