Typescript 元素隐式地具有一个';任何';类型,因为表达式的类型为';字符串';can';不能用于在angularjs中编制索引

Typescript 元素隐式地具有一个';任何';类型,因为表达式的类型为';字符串';can';不能用于在angularjs中编制索引,typescript,angular11,Typescript,Angular11,***元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“{}” 在类型{}上找不到参数类型为“string”的索引签名 而且 显示对象可能未定义 我试图在一个typescript文件中实现这段代码,但它显示了这些错误。为什么?我找不到错误。请帮忙。 getGlobalData() { return this.http.get(this.globalDataUrl, { responseType: 'text' }).pipe( map(resul

***元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“{}” 在类型{}上找不到参数类型为“string”的索引签名

而且 显示对象可能未定义


我试图在一个typescript文件中实现这段代码,但它显示了这些错误。为什么?我找不到错误。请帮忙。

getGlobalData() {
    return this.http.get(this.globalDataUrl, { responseType: 'text' }).pipe(
      map(result => {
        let data: GlobalDataSummary[] = [];
        let raw = {}
        let rows = result.split('\n');
        rows.splice(0, 1);
        // console.log(rows);
        rows.forEach(row => {
          let cols = row.split(/,(?=\S)/)

          let cs = {
            country: cols[3],
            confirmed: +cols[7],
            deaths: +cols[8],
            recovered: +cols[9],
            active: +cols[10],
          };
          let temp: GlobalDataSummary = raw[cs.country];
          if (temp) {
            temp.active = cs.active + temp.active
            temp.confirmed = cs.confirmed + temp.confirmed
            temp.deaths = cs.deaths + temp.deaths
            temp.recovered = cs.recovered + temp.recovered

            raw[cs.country] = temp;
          } else {
            raw[cs.country] = cs;
          }
        })
        return <GlobalDataSummary[]>Object.values(raw);
      })
    )
  }
getGlobalData(){
返回this.http.get(this.globalDataUrl,{responseType:'text'}).pipe(
映射(结果=>{
let数据:GlobalDataSummary[]=[];
设raw={}
让rows=result.split('\n');
行拼接(0,1);
//console.log(行);
rows.forEach(row=>{
设cols=row.split(/,(?=\S)/)
设cs={
国家:科尔斯[3],
已确认:+cols[7],
死亡人数:+cols[8],
恢复:+cols[9],
活动:+cols[10],
};
let temp:GlobalDataSummary=原始[cs.国家];
如果(临时){
温度激活=cs激活+温度激活
温度确认=cs确认+温度确认
临时死亡=临时死亡+临时死亡
温度恢复=cs恢复+温度恢复
原始[国家]=温度;
}否则{
原始[cs.国家]=cs;
}
})
返回Object.values(原始);
})
)
}
“字符串”类型的表达式不能用于索引类型“{}”

这意味着您不能执行
{}['somePropertyName']
。这是因为
raw
变量没有显式类型,代码将其初始化为
{}
,一个空对象,没有属性索引器

您可以为
raw
指定一种类型,该类型允许您的代码通过字符串索引获取其属性,如下所示:

let raw: {
    [key: string]: any
};
“字符串”类型的表达式不能用于索引类型“{}”

这意味着您不能执行
{}['somePropertyName']
。这是因为
raw
变量没有显式类型,代码将其初始化为
{}
,一个空对象,没有属性索引器

您可以为
raw
指定一种类型,该类型允许您的代码通过字符串索引获取其属性,如下所示:

let raw: {
    [key: string]: any
};

如果您只是想让错误消失,
让raw:any={}
。但是这样做就失去了打字脚本的意义。您甚至可以创建
{[string]:any}
的索引类型。但即使这样,您也会失去键入的好处,但我在重构现有代码时经常这样做作为临时解决方案,以便以后创建更好的类型。但是这样做就失去了打字脚本的意义。您甚至可以创建
{[string]:any}
的索引类型。但即使这样,您也会失去打字的好处,但我经常在重构现有代码时作为临时解决方案这样做,以便以后创建更好的类型。谢谢错误消失了。。。但是现在它在temp:GlobalDataSummary中显示“对象可能未定义”和返回对象。“变量raw在赋值之前使用”的值(raw)。。。。我该怎么办?好的。谢谢错误消失了。。。但是现在它在temp:GlobalDataSummary中显示“对象可能未定义”和返回对象。“变量raw在赋值之前使用”的值(raw)。。。。我该怎么办?