我在我的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
函数来解决它。
答案 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
}