我正在尝试利用Declaration Merging扩展@types/chart.js中现有的图表类型。 这个想法是添加一个属性。
到目前为止,我所做的是(file.d.ts):
import * as Chart from 'chart.js';
import { Tooltip } from './tooltip';
declare module 'Chart' {
class Chart {
pluginTooltips?: Tooltip[];
}
}
工具提示来自自定义的.ts文件。
显然我在做错什么,因为使用此新属性的代码无法编译:
TS2339属性'pluginTooltips'在图表类型上不存在
类型定义文件的构造如下:
declare class Chart {...}
...
export = Chart;
export as namespace Chart;
我猜模块声明是错误的,但是我找不到替代方法。
答案 0 :(得分:0)
模块扩充的问题始终是准确找到要扩充的内容。在这种情况下,您可能认为您想扩展chart.js
模块,但是如果我们查看定义,我们会看到export as namespace Chart;
这是UMD模块的导出,它实际上是将全局类导出为模块(docs)。
因此,该模块仅引用全局Chart
类,这是我们真正想要增强的。
import * as Chart from 'chart.js';
type Tooltip = {t: any}
declare global {
interface Chart {
pluginTooltips?: Tooltip[];
}
}
let c = new Chart(null!, null!);
c.pluginTooltips; // ok now