阅读:648回复: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 |
|
|