我有一个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>;
}
}
我想在一个完全独立的打字稿库中扩展Document
接口:https://github.com/CrossLead/tyranid-gracl通过向tyranid
方法添加$newMethod()
方法来导入import Tyr from 'tyranid';
declare namespace Tyr {
interface Document {
$newMethod(): number;
}
}
及其输入。文档界面。可以这样做吗?
我在第二个回购中的单独声明文件中尝试了以下内容,但它不起作用:
res.send(data.toObject({ virtuals: true }));
如果需要,我可以修改两个声明 - 我很可能没有正确地为tyranid编写原始类型定义文件。谢谢!
答案 0 :(得分:3)
以下结束了......
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的帮助!
答案 1 :(得分:2)
您正在尝试扩充模块tyranid
。一般语法非常简单:here是redux-thunk
扩充redux
的示例。
但是,由于tyranid
导出default
,因此不完全支持模块扩充。已修复export =
,如issue中所述。
要扩充tyranid
,我能想出的最好的(受comment启发)是将Tyr
命名空间放到全局范围内:
<强> node_modules /虫族/ 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 {}
中)
<强>的src / app.ts 强>
import Tyr from 'tyranid'
let specialVariable: Tyr.specialInterface = { someProp: 4 }