使用d3.mouse时出现D3打字稿错误:“ this”隐式具有类型“ any”,因为它没有类型注释

时间:2019-11-10 12:14:33

标签: javascript typescript d3.js

我在我的React应用程序中使用d3,在这里我使用Typescript编写代码。我有以下代码:

function mousemove() {
        // recover coordinate we need
        var x0 = xScale.invert(d3.mouse(this)[0]);
        var i = bisect(data, x0, 1);
        var selectedData = data[i]
        focus
            .attr("cx", xScale(selectedData.dateCreated))
            .attr("cy", yScale(selectedData[value]))
        focusText
            .html("x:" + selectedData.x + "  -  " + "y:" + selectedData.y)
            .attr("x", xScale(selectedData.dateCreated) + 15)
            .attr("y", yScale(selectedData[value]))
}

d3.mouse(this)[0]引发以下错误:

  

'this'隐式具有类型'any',因为它没有类型注释。

有任何解决建议吗?此错误是常见的打字稿,但我不知道如何使用d3.mouse函数来解决它。

1 个答案:

答案 0 :(得分:1)

我假设这是传递给d3.js的事件处理程序(即.on('mousemove'))的自定义方法

您可以通过引用实际的事件处理程序来处理事件回调,而不是引用可能this来作为当前类的实例进行推断的情况。

.on('mousemove' (d, i) => {
  mousemove();
})

function mousemove() {
  const x0 = xScale.invert(d3.mouse(d3.event.currentTarget));
  // do the rest
}

或者,您可以将节点传递给mousemove()函数。根据{{​​3}}

  

如果选择器是一个函数,则对每个选择器都进行评估   元素依次传递当前的基准(d)   索引(i)和当前组(节点),并以此作为当前DOM   元素(节点[i])。

.on('mousemove' (d, i, n) => {
  const node = d[i]
  mousemove(node);
})

function mousemove(node) {
      // do the rest
}