You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在另一个命名空间中导出已有命名空间的全部内容?

解决方案

你不能直接同时导出导入的同名命名空间和新声明的命名空间,这会触发重复声明冲突。要实现合并原命名空间内容并添加新成员,有两种可行方式:

方式一:手动导入并重导出原成员

假设原文件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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:38:20