【发布时间】:2017-11-12 08:47:07
【问题描述】:
我正在研究示例 Force Dragging I 并且已经能够使其与纯 JavaScript 一起使用。但是,我在尝试使用 TypeScript 时遇到了编译错误。
问题代码(去掉了多余的部分)是:
import * as d3 from "d3";
interface INode {
id: string;
group: number;
}
interface ILink {
source: string;
target: string;
value: number;
}
interface IGraph {
nodes: INode[];
links: ILink[];
}
var svg = d3.select("svg");
d3.json("data/miserables.json", function (error, graph: IGraph) {
var node = svg.append("g")
.selectAll("circle")
.data(graph.nodes) // Commenting this out, error goes away
.enter().append("circle")
.call(d3.drag() // Error here
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
});
.call(d3.drag() 行导致以下 tsc 错误:
App.tsx(31,15):错误 TS2345:“DragBehavior”类型的参数不可分配给类型参数 '(选择:选择,...参数:任何[]) => 无效'。 参数“selection”和“selection”的类型不兼容。 “选择”类型不能分配给“选择”类型。 类型“BaseType”不可分配给类型“元素”。 类型“null”不能分配给类型“元素”。
类似d3 v4 drag and drop with TypeScript,改代码重选圈子没有报错:
var nodes =
svg.append("g")
.selectAll("circle")
.data(graph.nodes)
.enter().append("circle");
var circle = svg.selectAll("circle");
circle.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
但是,当不使用类型时,这是不必要的。
我正在尝试在这里研究如何使用 TypeScript,以便定义具有适当类型的变量,或者编译所需的任何内容。
【问题讨论】:
-
其他用户拥有same problem,但提供的答案未经验证。
-
我可以用类似的方式解决这个错误,但不幸的是,在纯 js 中不需要重新选择。
-
在缩放和 ZoomBehaviour 方面有同样的问题(以防有人搜索这些特定术语)
标签: typescript d3.js