从模块声明文件中的命名空间合并接口

Ben*_*ate 3 typescript type-definition

我有一个 javascript 库,这里有一个类型定义文件: https: //github.com/tyranid-org/tyranid/blob/master/tyranid.d.ts,它通过typings我的package.json文件中的属性公开。

定义文件的基本版本:

export default Tyr;

declare namespace Tyr {
  interface Document {
    $save(): Promise<Document>;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想Document在一个完全独立的打字稿库中扩展该接口:https://github.com/CrossLead/tyranid-gracltyranid,通过向$newMethod()文档接口添加一个方法,该库与其类型一起导入。这可以做到吗?

我已在第二个存储库的单独声明文件中尝试了以下操作,但它不起作用:

import Tyr from 'tyranid';

declare namespace Tyr {

  interface Document {
    $newMethod(): number;
  }

}
Run Code Online (Sandbox Code Playgroud)

如有必要,我可以修改这两个声明——很可能我没有正确编写 tyranid 的原始类型定义文件。谢谢!

Ben*_*ate 5

以下最终工作...

node_modules/tyranid/tyranid.d.ts

export = Tyr // must do "import * as Tyr from 'tyranid'" instead of default

declare namespace Tyr {
  export interface Document {
    // original definition...
  }
}
Run Code Online (Sandbox Code Playgroud)

mylib/tyranid-extensions.d.ts...

declare module "tyranid" {
  interface Document {
    addedMethod(): boolean; 
  }
}
Run Code Online (Sandbox Code Playgroud)

感谢@pelle-jacobs 的帮助!