【问题标题】:Can't transpile typescript due to d3 event error由于 d3 事件错误,无法转换打字稿
【发布时间】:2016-10-27 09:49:27
【问题描述】:

我在使用 typescript 和 webpack 的 Angular 2 项目中有一个 d3 散点图。图表的一部分响应鼠标悬停事件以显示工具提示。现在 mouseover 事件实际上触发得很好,但是当 webpack 转换 typescript 时我看到一个错误。

 Property 'pageX' does not exist on type 'Event | BaseEvent'.

这是一个 sn-p 显示图表元素的鼠标悬停部分和有问题的d3.event.pageX

  .on("mouseover", (d: any) => {
    if(d.roleName) {
      div.transition()
        .duration(200)
        .style("display", "block")
        .style("opacity", 1);
      div.html(d.roleName + "<br/>"  + d.org.name)
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY-80) + "px");
    }
  })

我对 typescript 比较陌生,但我认为上述问题可能与 d3 Typings 文件未正确映射有关?

非常感谢任何指导。

【问题讨论】:

    标签: javascript d3.js typescript webpack


    【解决方案1】:

    由于 d3 不是真正的 TypeScript 库,我们得到 .d.ts 文件来描述原始库。在这种情况下,它无法知道在 on("mouseover" 中 d3.event 实际上意味着一个 MouseEvent,因此您可以尝试将其转换为另一种类型或忽略编译器中的这一小部分:

    .on("mouseover", (d: any) => {
      if(d.roleName) {
        div.transition()
          .duration(200)
          .style("display", "block")
          .style("opacity", 1);
        div.html(d.roleName + "<br/>"  + d.org.name)
          .style("left", ((<any>d3.event).pageX) + "px")
          .style("top", ((<any>d3.event).pageY-80) + "px");
      }
    })
    

    【讨论】:

      【解决方案2】:

      如你所见https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/d3/d3.d.ts

      接口Event|BaseEvent 具有NOT 属性pageX|pageY

      也许你应该打开一个问题。

      【讨论】:

      猜你喜欢
      • 2019-05-29
      • 1970-01-01
      • 2018-12-17
      • 2017-12-23
      • 1970-01-01
      • 2018-07-14
      • 2021-08-11
      • 2022-11-10
      • 1970-01-01
      相关资源
      最近更新 更多