错误:属性' x'类型' [数字,数字]'不存在

时间:2017-12-13 01:23:26

标签: d3.js path

我遇到了创建折线图的问题。

首先,我的return d.xreturn d.y不起作用。我收到错误:

  

Property 'x' does not exist on type '[number, number]' .

接口代码:

export interface TestItem { "x": number, "y": number }

示例数据:

let lineData = [{
    "x": 1,
    "y": 5
}, {
    "x": 20,
    "y": 20
}, {
    "x": 40,
    "y": 10
}, {
    "x": 60,
    "y": 40
}, {
    "x": 80,
    "y": 5
}, {
    "x": 100,
    "y": 60
}];

行命令:

let svgLine = d3.svg.line().x(function(d) {
  return d.x;
})
.y(function(d) {
  return d.y;
})
.interpolate("linear");

第二期:我的追加路径命令也有问题:

svgLine(lineData)如下错误:

  

类型的论证' {" x":数字; " y":数字; } []'不能分配给' [数字,数字] []'类型的参数。       输入' {" x":数字; " y":数字; }'不能指定类型' [数字,数字]'。           财产' 0'缺少类型' {" x":数字; " y":数字; }'

我引用了多个示例,它们都具有相同的代码。所以我不确定问题是什么。

1 个答案:

答案 0 :(得分:1)

查看D3 v3的type definitions,注意到d3.svg.line()生成器有两种形式:(1)使用默认类型[number, number]或(2)指定自己的类型类型:

namespace svg {
    export function line(): Line<[number, number]>;   // (1)
    export function line<T>(): Line<T>;               // (2)

由于在语句

中创建行生成器时未提供任何类型参数
let svgLine = d3.svg.line()

TypeScript编译器将使用上述情况(1),假设您的数据位于包含两个数字的tuple中。

这显然与lineData中的数据结构冲突,TestItem是一个对象数组,而不是一个明确定义的元组数组。因此,您目睹了编译器错误。

从声明中可以看出,解决方法很简单。您可以轻松传入界面let svgLine = d3.svg.line()<TestItem> .x(function(d) { return d.x; }) .y(function(d) { return d.y; }) .interpolate("linear"); 以将线生成器初始化为适当的类型:

C:\Program Files\WindowsPowerShell\Modules