首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并模块声明文件中命名空间中的接口

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

Stack Overflow用户
提问于 2016-08-28 05:03:37
回答 2查看 5.3K关注 0票数 2

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

定义文件的基本版本:

代码语言:javascript
复制
export default Tyr;

declare namespace Tyr {
  interface Document {
    $save(): Promise<Document>;
  }
}

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

我在第二个代码库的一个单独的声明文件中尝试了以下内容,但它不起作用:

代码语言:javascript
复制
import Tyr from 'tyranid';

declare namespace Tyr {

  interface Document {
    $newMethod(): number;
  }

}

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

EN

回答 2

Stack Overflow用户

发布于 2016-08-29 00:19:17

下面的方法最终成功了。

node_modules/tyranid/tyranid.d.ts

代码语言:javascript
复制
export = Tyr // must do "import * as Tyr from 'tyranid'" instead of default

declare namespace Tyr {
  export interface Document {
    // original definition...
  }
}

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

代码语言:javascript
复制
declare module "tyranid" {
  interface Document {
    addedMethod(): boolean; 
  }
}

感谢@pelle-jacobs的帮助!

票数 3
EN

Stack Overflow用户

发布于 2016-08-28 17:03:01

您正在尝试扩充模块tyranid。一般的语法非常简单:hereredux-thunk增强redux的一个例子。

但是,由于tyranid导出default,因此并不完全支持模块扩充。export =已修复,如本issue中所述。

为了增强tyranid,我能想到的最好的方法(受此comment启发)是将Tyr名称空间放入全局作用域:

node_modules/tyranid/tyranid.d.ts

代码语言:javascript
复制
import * as Express from 'express';
import * as mongodb from 'mongodb';

export default TyrStatic;

declare global {
  namespace TyrStatic {
    // existing implementation of the Tyr namespace
  }
} 

./index.d.ts

代码语言:javascript
复制
declare namespace TyrStatic {
  interface specialInterface {
    someProp: number
  }
}

(根据您是否需要这种增强来使用外部模块,您可能需要将其包装在declare global {}中)

源/app.ts

代码语言:javascript
复制
import Tyr from 'tyranid'
let specialVariable: Tyr.specialInterface = { someProp: 4 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39185728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档