javascript - 类型 'forEach' 上不存在属性 '{}'

标签 javascript angular typescript d3.js

我正在使用 Angular CLI 和 D3.js v4,但我不断收到 TypeScript 错误:Property 'forEach' does not exist on type '{}'。当我尝试引入我的数据时,错误发生在 forEach 函数上。

我正在关注 D3 Tips and Tricks这看起来非常广泛并且对图形库很有帮助,但不幸的是对我当前的问题没有帮助。

我知道我的 json 文件的路径是正确的,因为如果我的 forEach 函数在我的代码中被注释掉,我可以 console.log 数据。

我还尝试在 forEach 函数之前定义 data 以使 Typescript 知道 data 是一个数组。

感谢任何帮助!谢谢!

import { Component, OnInit } from '@angular/core';
import * as d3 from 'd3';

@Component({
    selector: 'pl-lukaku-graphs',
    templateUrl: './lukaku-graphs.component.html',
    styleUrls: ['./lukaku-graphs.component.scss']
})
export class LukakuGraphsComponent implements OnInit {

    constructor() { }

    total_min() {
        // create var for graph wrap
        let wrap = document.getElementById("wrapMinPlayed");
        // set up graph area
        let margin = {top: 30, right: 20, bottom: 30, left: 20},
            width = wrap.offsetWidth - margin.left - margin.right,
            height = wrap.offsetHeight - margin.top - margin.bottom;
        let data = [];
        d3.json('../../../../assets/data/lukaku.json', function(error, data) {
            console.log(data);
            console.log(error);
            if (error) throw error;
            // format data
            data.forEach(function(d) {
                d.date = parseTime(d.date);
                d.close = +d.close;
            });
        });
    }

    ngOnInit() {
        this.total_min();
    }

}


[
    {
        "season": "16/17",
        "match_day": "1",
        "opponent": "Spurs",
        "home_away": "Home",
        "final": "1-1",
        "status": "Not in squad",
        "min_played": 0,
        "goals": 0,
        "goal_min": [],
        "assists": 0
    }
]

最佳答案

这里 TypeScript 无法知道 data 是一个具有 forEach 方法的数组。

为了解决这个问题,应该正确输入data,例如:

d3.json('../../../../assets/data/lukaku.json', function(error, data: any[]) {
  ...
})

因为 d3.jsongeneric method ,正确的做法是指定泛型类型:

d3.json<any[]>('../../../../assets/data/lukaku.json', function(error, data) {
  ...
})

关于javascript - 类型 'forEach' 上不存在属性 '{}',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45021772/

相关文章:

angular - 如何让 "Observable.of([]);"工作?

javascript - Vuejs : Can't pass object to web component using v-bind

Angular NX - 是否可以在不提交代码或传递更改文件列表的情况下查看受影响的应用程序?

javascript - 是否可以将 VS Code 代码完成配置为接受标点符号建议?

Javascript Tablemodel 小部件

angular - 如何将子组件设置为路由器导出的默认路由?

angular - Typescript + Angular 2 : How can I ensure emitted decorator metadata will refer to variables in scope, 以避免 "not defined"错误?

javascript - AJAX 请求未进入就绪状态 4

javascript - JS 插件错误 (ASP.NET)

用于处理数组的 Javascript