如何在另一个命名空间中导出已有命名空间的全部内容?
解决方案
你不能直接同时导出导入的同名命名空间和新声明的命名空间,这会触发重复声明冲突。要实现合并原命名空间内容并添加新成员,有两种可行方式:
方式一:手动导入并重导出原成员
假设原文件a.ts内容为:
export namespace A { const foo = "bar"; }
在目标文件中,先导入原命名空间,再在新的导出命名空间内重导出原成员并添加新内容:
import * as OriginalA from './a'; export namespace A { // 重导出原命名空间的成员 export const foo = OriginalA.A.foo; // 添加新成员 export const bar = "foo"; }
如果原命名空间成员较多,可使用export import简化:
import * as OriginalA from './a'; export namespace A { // 批量导入原命名空间成员 export import foo = OriginalA.A.foo; // 其他成员依此类推... export const bar = "foo"; }
方式二:利用模块扩展合并命名空间
适合原命名空间成员较多的场景,无需逐个手动导出:
// 先导出原命名空间的所有内容到当前模块的A export * as A from './a'; // 扩展当前模块的A命名空间,添加新成员 declare module './当前文件名' { export namespace A { const bar = "foo"; } }
注意将./当前文件名替换为你实际的文件路径(比如当前文件是b.ts,则写./b)。
通过以上方式,其他模块导入该文件的A命名空间时,就能同时获取到原foo和新增的bar成员。
内容的提问来源于stack exchange,提问作者Dragonizedpizza
相关产品推荐
相关产品推荐

