Angular 2 - 构造函数中的构建日期 - 类型"日期"不可分配给类型"字符串"



我试图创建一个符合此示例的ngx-chart的新日期对象,特别是此代码:

  constructor() {
    this.data = this.multi.map(group => {
      group.series = group.series.map(dataItem => {
        dataItem.name = new Date(dataItem.name);
        return dataItem;
      });
      return group;
    });
    console.log(this.data);
  }

我使用new Date((理解,但我一直遇到此错误:"键入'date'不可分配给type'string'。"我也理解(因为这是打字稿(,我只是不明白我应该如何一起处理这两个。在其他示例中,我看到这似乎不是问题。

这是一种类型推理的情况。您不告诉TS是什么类型的"名称"。它看到双引号并渗透了一个字符串。您必须告诉TS这是any

您必须创建这样的接口:

interface Multi{
  name:String
  series: Array<{value: number, name: any}> // <-- note here it's explicitly any
}

然后您使用它:

export var multi: Multi[] = [
  {
    "name": "Tunisia",
    "series": [
      {
        "value": 3309,
        "name": "2016-09-19T10:24:08.741Z"
      }
      ...
    ]
  },
  {
    "name": "El Salvador",
    "series": [
      {
        "value": 5714,
        "name": "2016-09-19T10:24:08.741Z"
      },
      ....
    ]
  }
]

另外,您可以在TS不介意的情况下以不同的方式进行此操作,而不是在Plunker中进行的那个长长的语法:

 this.data = multi.map(group => 
       <any>{ // <-- tells TS this is explicitly any
         "name": group.name,
         "series": group.series.map(s => <any>{"value":s.value, "name":new Date(s.name)})
       });

最新更新