我已经下载了模块的类型定义,比方说ModuleA,从@types/module-a.
该模块ADTS文件的样子
declare module "module-a" {
export = moda;
}
declare namespace moda {
interface MODAPromise<T> {
isResolved(): boolean;
....;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的应用程序中,我发现我需要扩展这些类型以及一些额外的规范.
以下建议早些时候收到,我建立我的src目录下的文件模块a.augmented.d.ts这样在这个
declare module "module-a" {
export interface MODAPromise {
myNewProperty: any;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,TypeScript会发出错误信号"导出分配不能在包含其他导出元素的模块中使用". 排队
export = moda;
Run Code Online (Sandbox Code Playgroud)
的模块ADTS.有没有办法扩展这种类型的声明而无需触及原始的module-adts文件?
我发现我可以将export =语法与namespace界面中的导出类型结合起来.export =是有必要的(据我所知),表明外部模块使用CommonJS样式exports而不是ES6导出.如果您尝试同时使用export =和export在同一模块中,您将收到以下错误:
TS2309:导出分配不能在具有其他导出元素的模块中使用.
但是,如果声明声明与exports =表达式中使用的变量同名的命名空间,则可以将类型放在该命名空间内,使其可供使用模块访问.
以下是使用此技术的模块类型定义示例:
declare module 'some-module' {
namespace SomeClass {
export interface IMyInterface {
x:string;
};
}
class SomeClass {
constructor(p:SomeClass.IMyInterface);
}
exports = SomeClass;
}
Run Code Online (Sandbox Code Playgroud)
这是因为您将导出设置为 module-adts 中定义的“module-a”中的命名空间 moda,并且还在module-a.augmented.d.ts 中定义的“module-a”中导出了 MODAPromise 。
因此,您尝试定义的“module-a”如下所示:
declare module "module-a" {
export = moda;
export interface MODAPromise {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
您试图设置导出,并同时导出其他内容,这是没有意义的。您需要找到另一种方法来同时导出 moda 的 MODAPromise 和增强的 MODAPromise。
| 归档时间: |
|
| 查看次数: |
2739 次 |
| 最近记录: |