【问题标题】:Angular 2 - Building dates in constructor - Type 'Date' is not assignable to type 'string'Angular 2 - 在构造函数中构建日期 - 类型“日期”不可分配给类型“字符串”
【发布时间】:2017-09-28 13:15:12
【问题描述】:

我试图为this example 之后的 ngx 图表创建一个新的日期对象,特别是这段代码:

  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(),如 here 所示,但我不断收到此错误:“类型 'Date' 不可分配给类型 'string'。”我也明白(因为这是打字稿),我只是不明白我应该如何处理这两个。在我看到的其他示例中,这似乎不是问题。

【问题讨论】:

    标签: angular date typescript


    【解决方案1】:

    这是一个类型推断的例子。你不告诉 TS 'name' 是什么类型。它看到双引号并推断出一个字符串。你必须告诉 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)})
           });
    

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多