typescript - 如何编写 Typescript d.ts 文件来扩展 @types/d3

标签 typescript d3.js type-definition

我在谷歌上搜索并使用以下 ts 代码成功扩展了 d3js 选择:

import * as d3 from "d3";
d3.selection.prototype.popover = function() {};

然后从另一个 ts 文件中使用它,例如:

(d3.select("svg").selectAll(".node") as any).popover();

这行得通,但我不喜欢这里的“any”并且想扩展@types/d3 定义(我已经安装了@types/d3)。 我沿着函数代码 ts 文件创建了一个 d3.extend.d.ts,并写入:

/// <referencepath="../../node_modules/@types/d3-selection/index.d.ts">
declare module "d3-selection"{
   export interface Selection<GElement extends BaseType, Datum, PElement extends BaseType, PDatum>{
      popover();
   }
}

但这似乎不起作用,如果我从调用代码中删除 any,ts 编译器将出错。

更新:我根据答案更新了我的代码,使其成为最终的工作版本

最佳答案

您的声明合并需要使用模块的名称 - d3-selection - 其中声明了 Selection。像这样:

declare module "d3-selection" {
  export interface Selection<
    GElement extends BaseType,
    Datum,
    PElement extends BaseType,
    PDatum
  > {
    popover(): void;
  }
}

关于typescript - 如何编写 Typescript d.ts 文件来扩展 @types/d3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50441490/

相关文章:

angular - 如何在 Angular 7 中对 getCurrentNavigation().extras.state 进行单元测试

javascript - 在缩放/拖动时缩放/重绘 d3.js 网格线

javascript - D3 Javascript 条形图

javascript - 有没有一种简单的方法可以让非严格的 JavaScript 代码库在 'strict' 环境中运行?

typescript - 在 TypeScript 中内联类型定义

javascript - 如何实现具有属性子集的类?

node.js - 同步运行 Node sqlite3代码

javascript - 如何在 Typescript 中为 Angular2 编写 console.log 包装器?

javascript - Jointjs 类型定义

c - 带元组的 typedef 如何工作?