Angular - 服务组件

Angular - Service Component

元素隐式具有 'any' 类型,因为类型 'string' 的表达式不能用于索引类型“{}”。 在类型“{}”.ts(7053)

上找不到参数类型为 'string' 的索引签名

收到以上错误信息。在这方面需要帮助。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { GlobalDataSummary } from '../models/gloabl-data';

@Injectable({
  providedIn: 'root'
})
export class DataServiceService {

  private globalDataUrl = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/01-01-2021.csv'
  constructor(private http : HttpClient) { }
  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 = 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 Object.values(raw);
        
      })
    )
  }
}

您收到此错误是因为您将值动态分配给未明确标记类型的原始数据。这可以通过使用任何类型显式标记 raw 来解决。变化

let raw = {}

 let raw:any = {}

这将是一个快速修复。使用正确打字的更好修复。像这样为原始对象创建类型

interface Raw {
   [key: string]: CS;
} 

这里我们正在为对象创建一个类型,该对象将具有字符串键,值将是 CS 类型。 CS 是您要分配给原始文件的内容。您可以根据自己的选择命名它。以下是 CS 的类型。

interface CS {
    country: string;
    confirmed : number,
    deaths : number,
    recovered : number,
    active : number,
}

像这样分配类型:

let raw: Raw = {};

// 这不会失败。这只是一个应该有效的示例。

raw['India'] = {
     country: 'India',
    confirmed : 22,
    deaths : 0,
    recovered : 22,
    active : 0,
}