1

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

并且还显示对象可能是未定义的。


我试图在打字稿文件中实现此代码,但它显示了这些错误。为什么?我无法找到错误。请帮忙。

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);
      })
    )
  }
4

1 回答 1

0

“字符串”类型的表达式不能用于索引类型“{}”

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

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

let raw: {
    [key: string]: any
};
于 2020-12-04T07:04:40.610 回答