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

如何在TypeScript多文件中定义同一命名空间并统一导出?

解决TypeScript多文件定义同一命名空间并统一导出的问题

你遇到的警告是因为两个文件都导出了同名的aaa命名空间,使用export *会触发命名冲突。这里提供几种可行的解决方式:

方式一:显式合并后导出

在index.ts中分别导入两个文件的aaa,通过重命名避免冲突,再合并成一个对象导出,同时保留类型信息:

import { aaa as aaaFromA } from "./a";
import { aaa as aaaFromB } from "./b";

export const aaa = { ...aaaFromA, ...aaaFromB } as typeof aaaFromA & typeof aaaFromB;

这种方式简单直接,适合命名空间内都是变量、函数这类可扩展成员的场景。

方式二:拆分成员导出,再统一组合成命名空间

不在子文件中导出整个命名空间,而是单独导出成员,之后在index.ts里创建并导出完整的aaa命名空间:

a.ts:

export const a = "a";

b.ts:

export const b = "b";

index.ts:

import { a } from "./a";
import { b } from "./b";

export namespace aaa {
  export { a, b };
}

这种方式结构清晰,后续新增成员时,只需在对应子文件导出,再在index.ts的命名空间中引入即可。

方式三:利用模块级命名空间合并(调整子文件写法)

如果想保留子文件里的命名空间写法,可以去掉子文件的export,让命名空间在模块内部自动合并,最后在index.ts统一导出:

a.ts:

// 不export命名空间,使其成为模块内部的命名空间
namespace aaa {
  export const a = "a";
}

b.ts:

namespace aaa {
  export const b = "b";
}

index.ts:

// 导入两个文件触发命名空间合并
import "./a";
import "./b";

// 声明合并后的命名空间类型并导出
declare namespace aaa {
  export const a: string;
  export const b: string;
}

export { aaa };

这种方式适合需要在子文件内用命名空间组织代码的场景,但需要手动补充类型声明。

内容的提问来源于stack exchange,提问作者Lucio Flores

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:55:15