gpt4 book ai didi

扩展 typescript 定义时出现 typescript 错误 "An export assignment cannot be used in a module with other exported elements."

转载 作者:搜寻专家 更新时间:2023-10-30 20:39:16 25 4
gpt4 key购买 nike

我已经从 @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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com