typescript - Angular-4 d3 v4 Problem: Egenskapen 'x' finnes ikke på typen 'HierarchyNode'
Jeg prøver å lage et d3-tre i min Angular-app, jeg prøver dette eksempelet: https://bl.ocks.org/d3noob/08ecb6ea9bb68ba0d9a7e89f344acec8
Problem oppstår når jeg prøver å få tilgang til nodenes x-y-koordinater, jeg får feilen: Egenskapen 'x' eksisterer ikke på typen 'HierarchyNode'
Når jeg logger dataene, kunne jeg se at x-y-koordinatene er der. Skjermbilde som viser de loggede dataene
// declares a tree layout and assigns the size
var treemap = d3.tree()
.size([this.height, this.width]);
// assigns the data to a hierarchy using parent-child relationships
var nodes = d3.hierarchy(this.treeData, function(d) {
return d.children;
});
// maps the node data to the tree layout
nodes = treemap(nodes);
console.log(nodes.descendants());
// adds each node as a group
var node = g.selectAll(".node")
.data(nodes.descendants())
.enter().append("g")
.attr("class", function(d) {
return "node" +
(d.children ? " node--internal" : " node--leaf"); })
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; });d.x og d.y gir feilen
Svar #1
TypeScript har kontekstuell typeinference, og siden HierarchyNode ikke eksporterer 'x' og 'y'-egenskaper vil ikke dette kompilere. Du kan bruke 'any' som inputtype for å unngå feilen:
...
.attr("transform", function(d: any) {
return "translate(" + d.x + "," + d.y + ")"; });
Svar #2
Du kan eksplisitt spesifisere typen for å overstyre kontekstuell typisering
.attr('cx', function (d: HierarchyPointNode<MyDatumInterface>) {
return d.x // no TS error
})
