TypeScript深度剖析:TypeScript 中命名空间与模块的区别?
在TypeScript中,命名空间(Namespace)和模块(Module)是两种用于组织代码的机制。它们的主要区别如下:
- 作用范围:命名空间是全局范围的,一个命名空间下的成员可以被项目中的任何文件访问。而模块是文件级别的,一个模块中的导出(export)成员只能被同一文件中的导入(import)语句引用。
- 封装性:模块可以使用export来封装特定的功能或变量,而在其他文件中可以使用import来引用这些功能或变量。而命名空间则是全局可见的,不提供封装性。
- 重命名:模块可以通过as来进行重命名,而命名空间不支持这一操作。
- 默认导出:模块可以有默认导出,但命名空间不可以。
- 导入方式:模块需要使用import语句来导入,而命名空间则是通过reference标签在全局范围引入。
示例代码:
// 命名空间
namespace MyNamespace {
export let x = 10;
}
// 模块
module MyModule {
export let x = 20;
}
// 引用命名空间
/// <reference path="MyNamespace.ts" />
console.log(MyNamespace.x); // 输出 10
// 导入模块
import { x } from "./MyModule";
console.log(x); // 输出 20
在实际开发中,推荐使用模块,因为它提供了更好的封装性和可维护性。同时,TypeScript 2.0+版本中推荐使用ES模块语法,即import
和export
关键字。
评论已关闭