我有一个javascript库,其中有一个类型定义文件:https://github.com/tyranid-org/tyranid/blob/master/tyranid.d.ts,它是通过我的package.json文件中的typings属性公开的。
定义文件的基本版本:
export default Tyr;
declare namespace Tyr {
interface Document {
$save(): Promise<Document>;
}
}我想在一个完全独立的typescript库中扩展Document接口:https://github.com/CrossLead/tyranid-gracl,它通过向文档接口添加一个$newMethod()方法来导入tyranid及其类型。这可以做到吗?
我在第二个代码库的一个单独的声明文件中尝试了以下内容,但它不起作用:
import Tyr from 'tyranid';
declare namespace Tyr {
interface Document {
$newMethod(): number;
}
}如果需要,我可以修改这两个声明--很可能我没有正确地编写tyranid的原始类型定义文件。谢谢!
发布于 2016-08-29 00:19:17
下面的方法最终成功了。
在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...
}
}在mylib/tyranid-extensions.d.ts中...
declare module "tyranid" {
interface Document {
addedMethod(): boolean;
}
}感谢@pelle-jacobs的帮助!
发布于 2016-08-28 17:03:01
您正在尝试扩充模块tyranid。一般的语法非常简单:here是redux-thunk增强redux的一个例子。
但是,由于tyranid导出default,因此并不完全支持模块扩充。export =已修复,如本issue中所述。
为了增强tyranid,我能想到的最好的方法(受此comment启发)是将Tyr名称空间放入全局作用域:
node_modules/tyranid/tyranid.d.ts
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
declare namespace TyrStatic {
interface specialInterface {
someProp: number
}
}(根据您是否需要这种增强来使用外部模块,您可能需要将其包装在declare global {}中)
源/app.ts
import Tyr from 'tyranid'
let specialVariable: Tyr.specialInterface = { someProp: 4 }https://stackoverflow.com/questions/39185728
复制相似问题