如何使用TypeScript在d3中停止事件传播?

时间:2017-01-12 05:52:41

标签: 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.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中的on方法签名已更改。声明文件如下所示。

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>;
 }
}

以下是与d3相关的npm依赖项。

  • “@ types / d3”:“3.5.37”
  • “d3”:“^ 3.5.16”

如何在TypeScript中做同样的事情?

1 个答案:

答案 0 :(得分:1)

事实证明我必须做一些演员。

let event = d3.event as d3.BaseEvent;
event.sourceEvent.stopPropagation();