定义方式
- 命名空间:使用
namespace
关键字定义,例如:
namespace MyNamespace {
export const myValue = 42;
}
- 模块:每个包含顶级
import
或 export
的文件都被视为一个模块。可以使用 export
关键字导出内容,例如:
// module.ts
export const myModuleValue = 100;
作用域
- 命名空间:在其定义的文件内有全局作用域,不同文件中的同名命名空间会合并。例如:
// file1.ts
namespace MyNamespace {
export const value1 = 1;
}
// file2.ts
namespace MyNamespace {
export const value2 = 2;
}
// 此时MyNamespace包含value1和value2
- 模块:具有自己独立的作用域,模块内的内容默认对外不可见,只有通过
export
导出后才能在其他模块中导入使用。
应用场景
- 命名空间:适用于将相关代码组织在一起,主要用于内部代码结构的组织,在单个项目中避免命名冲突,特别是在没有使用模块系统的旧项目中。
- 模块:更适合于大型项目中,用于代码的封装和复用。模块能更好地管理依赖关系,不同模块之间相互独立,便于代码的维护和扩展,是现代JavaScript和TypeScript项目中推荐的代码组织方式。