合并现有类型的类声明

时间:2019-02-15 10:11:21

标签: typescript chart.js

我正在尝试利用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;

我猜模块声明是错误的,但是我找不到替代方法。

1 个答案:

答案 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