代码之家  ›  专栏  ›  技术社区  ›  Olivier MATROT

现有类型的类声明合并

  •  0
  • Olivier MATROT  · 技术社区  · 6 年前

    我想利用 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 回复  |  直到 6 年前
        1
  •  0
  •   Titian Cernicova-Dragomir    6 年前

    模块扩充的问题总是要精确地找到您想要扩充的内容。在这种情况下,您可能会认为您想增加 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