D3.js:'this'隐式地具有类型'any',因为它没有类型注解

lawou6xi  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(182)

我使用3D.js库:

d3.select(`#myGraph`)
  .append('svg')

const svg = d3.select(`#myGraph svg`).append('g')

const nodeEnter = svg.selectAll("g.node")
  .data(nodes)
  .enter()
  .append("g")
  .attr("class", "node")
  .call(force.drag())

svg.selectAll(".node")
      .each(function (d: any) {
        d3.select(this)
          .attr("data-source", d.id)
      })

但我得到了错误:“this”隐式具有类型“any”,因为它没有类型注解
我怎么能在没有@ts-ignore的情况下修复它?

fiei3ece

fiei3ece1#

你可以在函数中将类型注解添加到this

svg.selectAll(".node")
      .each(function (this: any, d: any) {
        d3.select(this)
          .attr("data-source", d.id)
      })

或者,如果不需要显式的any,可以将其定义为SVGGraphicsElement,这是一种通用的SVG元素类型。如果你想更详细,它可以是一个更具体的类型(如SVGRectElementSVGGElement),以更好地描述选择。

svg.selectAll(".node")
      .each(function (this: SVGGraphicsElement, d: any) {
        d3.select(this)
          .attr("data-source", d.id)
      })
lymnna71

lymnna712#

我也有同样的问题。我有一个Angular 的应用程序,当我悬停在生成的矩形上时,我需要显示信息。
这就是问题所在:

boxes.on('mouseover', (mouseEvent, d) => { d3.select(this) ...

同样的问题“this”隐式地键入任何...
该事件具有名为currentTarget So的当前元素,而不是:

d3.select(this)

在我的typescript应用程序中,我有:

d3.select(mouseEvent.currentTarget)

这为我解决了问题。

相关问题