d3.hierarchy
ルートを使用している間、私は適切なTSの種類を使用しようとしています
:D3(V4)ツリーのレイアウトとtypescriptです:プロパティ「x」はタイプに存在しません「HierarchyNode <IOrgChartNode>」
interface MyCustomGraphType {
id: string;
children?: MyCustomGraphType[]
}
let treeData: MyCustomGraphType = {/*...*/};
let root = d3.hierarchy(treeData);
let layout = d3.tree().size([500,500])(root);
let nodes = layout.descendants();
// BIND DATA (Node)
let node = this.nodesGroup.selectAll('g.node')
.data(nodes, d => d.data.person.email); // <--- compile-time error
// ^^^ Property 'data' does not exist on type '{} | HierarchyNode<MyCustomGraphType>'.
// ... later:
node.enter()
.append('circle')
.attr('transform', d => `translate(${d.x}, ${d.y})`); // <--- compile-time error
// ^^^ Property 'y' does not exist on type '{} | HierarchyNode<MyCustomGraphType>'.
明らかに、最初のエラーは何らかの理由で、ユニオンタイプ'{} | HierarchyNode<MyCustomGraphType>'
がkey
機能で推論されるためです。 2番目のエラーは、以前に定義されていなかったプロパティがd3.tree
に追加されたためです。
タイプセーフティを維持しながらこれにアプローチするにはどうすればよいですか?
ありがとうございます!
P.S.私は、D3のバージョンを使用しています4
説明に努力を惜しまない、@トムワンゼク。すべてが理にかなっています。私はこれを次の機会に試してみましょう。本当にありがとう! – AndyPerlitch