注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。
命名空间用于将相关的变量、函数、接口或类组合在一个名称下。
这是一个简单的命名空间示例。您可以阅读本教程的其余部分了解更多信息。
示例
namespace MathUtils {
export function add(a: number, b: number): number {
return a + b;
}
}
console.log(MathUtils.add(5, 10));
// Output:
// 15
这里,
MathUtils
是一个命名空间。add()
是其中的一个函数。export
关键字使函数可以在命名空间外部访问。
命名空间的语法
命名空间的语法是
namespace NamespaceName {
export function functionName() {
// function body
}
export class ClassName {
// class body
}
}
这里,
namespace
是定义命名空间的关键字。export
使函数或类可以在命名空间外部可用。
示例 1:带多个函数的命名空间
namespace StringUtils {
export function toUpper(text: string): string {
return text.toUpperCase();
}
export function toLower(text: string): string {
return text.toLowerCase();
}
}
console.log(StringUtils.toUpper("hello")); // HELLO
console.log(StringUtils.toLower("WORLD")); // world
示例 2:带类的命名空间
namespace App {
export class User {
constructor(public name: string) {}
greet() {
console.log("Hello, " + this.name);
}
}
}
const user = new App.User("Alice");
user.greet(); // Hello, Alice
示例 3:嵌套命名空间
namespace Company {
export namespace HR {
export class Employee {
constructor(public name: string) {}
}
}
}
const emp = new Company.HR.Employee("John");
console.log(emp.name); // John
何时使用命名空间
当您想
- 将相关的代码(函数、类等)组合在一起时,命名空间很有用。
- 当您想避免全局作用域中的命名冲突时。
- 您正在处理旧项目或不支持 ES6 模块的环境时。
命名空间和模块之间的主要区别
虽然命名空间和模块都可以用于组织代码,但这里有一些区别
命名空间 | 模块 |
---|---|
命名空间是 TypeScript 的一个特性。 | 模块是 JavaScript 和 TypeScript 的特性。 |
它们用于在单个文件中组织代码。 | 它们允许代码跨多个文件进行拆分。 |
它们在单个文件中使用 export。 | 它们使用 import 和 export。 |
阅读更多