代码之家  ›  专栏  ›  技术社区  ›  Tim

模块使用者的类型脚本声明合并

  •  0
  • Tim  · 技术社区  · 6 年前

    我有一个库,它有以下类型声明:

    declare namespace Something {
      interface Else extends EventEmitter {
        on(event: 'some-event', listener: (event: Event) => void): this;
        on(event: 'another-event', listener: (event: OtherEvent) => void): this,
        // etc
      }
    
      const else: Else;
    }
    
    declare module 'something' {
      export = Something;
    }
    

    它的用法是:

    import { else } from 'something';
    
    else.on('some-event', e => { });
    

    我正在创建一个扩展上述库并发出其他事件的库 else ,所以我想扩展上面的类型。以下感觉应该可以工作,但仅当我将其包含在正在使用的模块中时 new-amazing-event .

    declare namespace Something {
      interface Else {
        on(event: 'new-amazing-event', listener: (arg: AmazingArg) => void): this,
      }
    }
    

    我如何确保我的库的使用者在不包括上述内容的情况下获得这些扩展类型声明?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Matt McCutchen    6 年前

    只需在库中编写扩充:

    declare module "something" {
      interface Else {
        on(event: 'new-amazing-event', listener: (arg: AmazingArg) => void): this,
      }
    }
    

    然后,您需要确保库的使用者在编译时引用包含这种扩充的文件。实现这一点的方法将取决于库的打包形式(例如,NPM包)和使用者使用的类型脚本编译器选项。如果你提供更多的信息,我或其他人可能会提供更多的帮助。