Javascript 如何使用TypeScript停止d3中的事件传播?
在JavaScript中,我有如下代码,用于在拖动某个对象时停止事件传播Javascript 如何使用TypeScript停止d3中的事件传播?,javascript,d3.js,typescript,typescript-typings,Javascript,D3.js,Typescript,Typescript Typings,在JavaScript中,我有如下代码,用于在拖动某个对象时停止事件传播 var drag = d3.behavior.drag() .origin(function(d) { return d; }) .on('dragstart', function(e) { d3.event.sourceEvent.stopPropagation(); }) .on('drag', function(e) { ... }); 在TypeScript中,我注意到,d3.
var drag = d3.behavior.drag()
.origin(function(d) {
return d;
})
.on('dragstart', function(e) {
d3.event.sourceEvent.stopPropagation();
})
.on('drag', function(e) { ... });
在TypeScript中,我注意到,d3.event.sourceEvent
不存在。下面是相应的TypeScript代码
let drag = d3.behavior.drag()
.origin( (d, i) => {
let data = d as any;
return { x: data.x as number, y: data.y as number };
})
.on('dragstart', (d, i) => {
//what to do here
})
.on('drag', (d, i) => { ... });
事实上,上的方法签名在TypeScript中已更改。声明文件如下所示
export module behavior {
interface Drag<Datum> {
on(type: string): (d: Datum, i: number) => any;
on(type: string, listener: (d: Datum, i: number) => any): Drag<Datum>;
}
}
导出模块行为{
界面阻力{
on(类型:字符串):(d:基准,i:编号)=>任意;
打开(类型:字符串,侦听器:(d:Datum,i:number)=>any):拖动;
}
}
下面是我与d3相关的npm依赖项
- “@types/d3”:“3.5.37”
- “d3”:“^3.5.16”
你知道如何在TypeScript中做同样的事情吗?结果我不得不做一些铸造
let event = d3.event as d3.BaseEvent;
event.sourceEvent.stopPropagation();
我想应该是d3.event.stopPropagation()
我在使用Scala.js时遇到了同样的问题,您的回答帮助我找到了解决方案:d3.event.asInstanceOf[MouseEvent].stopPropagation()