目标对象为
{
name:'xiaoming',
city:{value: 210000, label: 'shanghai'}
}
通过produce方法改为
{
name:'xiaoming',
city:210000,
}
报错,求答案?
图中代码如下:
const produce = (obj: { [key: string]: string | { value: number | string; label: string } }) => {
Object.keys(obj).forEach((item) => {
if (typeof obj[item] === 'object') {
obj[item] = obj[item].value;
}
});
return obj;
};
虽然 判断了
typeof obj[item] === "object"
,但是再次使用obj[item]
的时候,它的类型仍然是不确定的 —— 谁说两次[]
运算就一定会返回相同的东西呢?所以if
块里的obj[item].value
这里,obj[item]
仍然有可能是string
类型,当然取不到value
属性。加个临时变更可以解决这个问题然后错误会标在
obj[item]
上,这回是因为v.value
的类型是number | string
,而obj[item]
不能接受number
类型的数据。可以再加一个判断来处理这里可以在逻辑保证类型安全的情况下用一句话搞定(但不推荐,这不是类型安全的写法,万一以后改了类型呢)
类型安全的写法还可以这样(逻辑跟之前的那个类型安全的没多大区别)