- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经从 @types/module-a
下载了一个模块的类型定义,比方说 ModuleA。
module-a.d.ts 文件看起来像
declare module "module-a" {
export = moda;
}
declare namespace moda {
interface MODAPromise<T> {
isResolved(): boolean;
....;
}
}
现在,在我的应用程序中,我发现我需要使用一些额外的规范来扩展这些类型。
根据之前收到的建议,我在我的 src 目录中构建了一个文件 module-a.augmented.d.ts 就这样
declare module "module-a" {
export interface MODAPromise {
myNewProperty: any;
}
}
如果我这样做,TypeScript 会发出错误信号“导出分配不能用于包含其他导出元素的模块。” 行
export = moda;
module-a.d.ts。有没有一种方法可以扩展这种类型的声明而不必触及原始的 module-a.d.ts 文件?
最佳答案
我发现我可以将 export =
语法与 namespace
结合起来从接口(interface)中导出类型。 export =
是必需的(据我所知)以指示外部模块使用 CommonJS 样式的 exports
而不是 ES6 导出。如果您尝试在同一模块中同时使用 export =
和 export
,您将收到以下错误:
TS2309: An export assignment cannot be used in a module with other exported elements.
但是,如果您声明一个与 exports =
表达式中使用的变量同名的命名空间,您可以将类型放置在该命名空间内,使它们可供使用模块访问。
下面是一个使用这种技术的模块类型定义的例子:
declare module 'some-module' {
namespace SomeClass {
export interface IMyInterface {
x:string;
};
}
class SomeClass {
constructor(p:SomeClass.IMyInterface);
}
export = SomeClass;
}
关于扩展 typescript 定义时出现 typescript 错误 "An export assignment cannot be used in a module with other exported elements.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708410/
我是一名优秀的程序员,十分优秀!