如何编写打字稿d.ts文件来扩展@ types / d3

时间:2018-05-21 03:10:58

标签: typescript d3.js type-definition

我在google上搜索并使用以下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编译器将收到错误。

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

1 个答案:

答案 0 :(得分:1)

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

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