为模块的使用者合并TypeScript声明

时间:2018-07-28 15:09:25

标签: typescript typescript-typings

我有一个具有以下类型声明的库:

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

答案 0 :(得分:1)

只需在您的库中编写扩充内容即可

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

然后,您需要确保库的使用者在编译时会引用包含此扩充功能的文件。这样做的方式取决于打包程序库的形式(例如NPM程序包)以及使用者使用的TypeScript编译器选项。如果您提供更多信息,我或其他人可能会提供更多帮助。