
命名空间和模块是 TypeScript 中两种重要的代码组织方式。命名空间通过 `namespace` 关键字定义,用于封装逻辑相关的代码,避免命名冲突和全局作用域污染。模块则通过 `export` 关键字导出成员,并通过 `import` 关键字导入其他模块的成员,适用于模块化代码,使得项目结构更清晰、更易于维护。两者在导出方式、导入方式、代码组织和依赖管理上有所不同,开发者应根据项目需求选择合适的代码组织方式。
namespace 关键字来定义。可以将相关的代码包裹在一个命名空间内,避免全局作用域污染和命名冲突。namespace MyNamespace {
export function greet(name: string): string {
return `Hello, ${name}!`;
}
}export 关键字导出,使得它们可以在命名空间外部访问。在其他部分,可以使用 MyNamespace.xxx 的方式来调用命名空间内的成员。const message = MyNamespace.greet("Laucher");
console.log(message); // 输出:Hello, Laucher!export 关键字来导出成员,并在其他地方使用 import 关键字来导入模块的成员。模块化的代码结构更适合大型项目,使得项目结构更清晰、更易于维护。// MyModule.ts
export function greet(name: string): string {
return `Hello, ${name}!`;
}import 关键字来导入模块内的成员,并通过函数名调用模块内的函数。// Main.ts
import { greet } from "./MyModule";
const message = greet("Laucher");
console.log(message); // 输出:Hello, Laucher!import 和 export 实现模块之间的代码共享和重用,提高代码的可维护性和复用性。导出方式:命名空间使用 namespace 关键字和 export 关键字来导出成员,而模块使用 export 关键字来导出成员。
导入方式:命名空间没有专门的导入语法,通常使用 /// <reference> 指令来引入命名空间。模块使用 import 关键字来导入其他模块的成员。
代码组织:命名空间适用于组织逻辑相关的代码,将它们封装在一个命名空间内,避免命名冲突。模块适用于模块化代码,将不同功能的代码分割成独立的文件,使得项目结构更清晰、更易于维护。
依赖管理:模块提供了更强大的依赖管理功能,可以更好地管理模块之间的依赖关系,有助于解决模块间的循环依赖问题。