doubleyong
管理员
管理员
  • 最后登录2023-12-01
  • 发帖数1156
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:648回复:0

[其它]typescript:Element implicitly has an ‘any‘ type because expression of type ‘any‘ can‘t 报错

楼主#
更多 发布于:2023-08-15 16:55
问题:


使用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
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号