我在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编译器将收到错误。
更新:我根据答案更新了我的代码,使其成为最终的工作版本
答案 0 :(得分:1)
您的声明合并需要使用模块的名称 - d3-selection
- 其中声明了Selection
。像这样:
declare module "d3-selection" {
export interface Selection<
GElement extends BaseType,
Datum,
PElement extends BaseType,
PDatum
> {
popover(): void;
}
}