|
阅读:5434回复:0
[其它]typescript:Element implicitly has an ‘any‘ type because expression of type ‘any‘ can‘t 报错
问题:
使用typescript 进行编写代码时,报如何错误: Element implicitly has an ‘any‘ type because expression of type ‘any‘ can‘t be used to index type 报错 报错代码: delete o[RelationObj[key]]; // 新对象的键名对应的值等于老对象的键名 o[key] = item[RelationObj[key]]; 完整代码如下: export function dataAdapter(HouData:Array<object>,RelationObj:object){
// newArr是返回的新数组
let newArr:Array<any> = [];
// 不需要用map或者filter来循环产生新数组,所以用forEach
HouData.forEach((item)=>{
// new一个新对象把它每次循环的结果放到新数组里面去
console.log(item);
let o = new Object();
o = {...item};
for(let key in RelationObj){
// 把这个对象里原来对应的值(键名和键值)给它删掉
delete o[RelationObj[key]];
// 新对象的键名对应的值等于老对象的键名
o[key] = item[RelationObj[key]];
}
newArr.push(o);
})
return newArr;
}
原因:TypeScript 中的对象类型是开放的或可扩展的,而不是封闭的或精确的; 可以当使用for(var key in obj) , 使用obj[key] 就会报如上警告 解决方案: 结合keyof 与typeof 进行使用,代码如下: delete o[RelationObj[key as keyof typeof RelationObj]]; // 新对象的键名对应的值等于老对象的键名 o[key as keyof typeof o] = item[RelationObj[key as keyof typeof RelationObj]]; 完整代码如下: export function dataAdapter(HouData:Array<object>,RelationObj:object){
// newArr是返回的新数组
let newArr:Array<any> = [];
// 不需要用map或者filter来循环产生新数组,所以用forEach
HouData.forEach((item)=>{
// new一个新对象把它每次循环的结果放到新数组里面去
console.log(item);
let o = new Object();
o = {...item};
for(let key in RelationObj){
// 把这个对象里原来对应的值(键名和键值)给它删掉
delete o[RelationObj[key as keyof typeof RelationObj]];
// 新对象的键名对应的值等于老对象的键名
o[key as keyof typeof o] = item[RelationObj[key as keyof typeof RelationObj]];
}
newArr.push(o);
})
return newArr;
}
keyof, typeof 的介绍 TypeScript中的 keyof 类型操作符可以获取某个类型的所有属性名组成的联合类型。 TypeScript中的typeof类型操作符可以用来获取一个值的类型信息,它返回一个代表该值类型的字符串 参考:https://blog.csdn.net/yanzi_0216/article/details/115209363 |
|
|