TypeScript 的命名空间(Namespaces)是用于组织代码的一种方式,可以将相关的类、接口、函数和变量封装在一起。使用命名空间可以帮助避免全局作用域的污染,并且可以使代码更模块化和易于维护。从 TypeScript 1.5 开始,推荐使用 ES6 模块系统 (import
和 export
) 来代替命名空间,因为模块提供了更好的组织结构和支持异步加载等特性。然而,在某些情况下,如在非模块化的环境中或需要向后兼容时,命名空间仍然是有用的。
创建和使用命名空间
示例 1: 基本命名空间
在这个例子中,我们将创建一个简单的命名空间 MathOperations
,它包含几个数学操作函数。
// 定义命名空间 MathOperations
namespace MathOperations {
// 导出函数 add
export function add(a: number, b: number): number {
return a + b;
}
// 导出函数 subtract
export function subtract(a: number, b: number): number {
return a - b;
}
// 私有函数 multiply,仅在命名空间内部可用
function multiply(a: number, b: number): number {
return a * b;
}
}
// 使用命名空间中的函数
console.log(MathOperations.add(5, 3)); // 输出: 8
console.log(MathOperations.subtract(5, 3)); // 输出: 2
// console.log(MathOperations.multiply(5, 3)); // 错误:multiply 是私有的,不能从外部访问
在这个例子中,add
和 subtract
函数被导出了,因此可以在命名空间外部访问它们。而 multiply
函数没有被导出,所以它只能在 MathOperations
命名空间内使用。
当然,下面是三个使用 TypeScript 基本命名空间的示例。这些例子展示了如何创建和使用命名空间来组织代码,包括函数、类和接口。
示例 2: 使用命名空间封装数学操作
在这个例子中,我们将创建一个简单的命名空间 MathOperations
,它包含几个数学操作函数,并演示如何在命名空间外部调用它们。
// 定义命名空间 MathOperations
namespace MathOperations {
// 导出函数 add
export function add(a: number, b: number): number {
return a + b;
}
// 导出函数 subtract
export function subtract(a: number, b: number): number {
return a - b;
}
// 私有函数 multiply,仅在命名空间内部可用
function multiply(a: number, b: number): number {
return a * b;
}
// 导出一个公共函数来访问私有函数
export function publicMultiply(a: number, b: number): number {
return multiply(a, b);
}
}
// 使用命名空间中的函数
console.log(MathOperations.add(5, 3)); // 输出: 8
console.log