namespace 命名空间
TypeScript
中的namespace
是用来组织代码的一种方式,它提供了一种在全局作用域下创建逻辑上的独立的命名空间的方法。可以将其视为一种类似于模块的方式,可以在其中定义变量、函数、类等等,并且可以防止与其他代码中的同名变量、函数、类等冲突。
以下是一个简单的使用示例:
ts
namespace MyNamespace {
export interface Person {
name: string;
age: number;
}
export function sayHello(person: Person) {
console.log(`Hello, ${person.name}! You are ${person.age} years old.`);
}
}
const john: MyNamespace.Person = { name: 'John', age: 30 };
MyNamespace.sayHello(john);
在这个示例中,我们定义了一个名为 MyNamespace
的命名空间,在其中定义了一个接口 Person
和一个函数 sayHello
。由于这些都是在命名空间内定义的,因此不会与其他代码中的同名元素冲突。
注意,在使用命名空间时,需要使用
export
关键字来导出需要在命名空间外部访问的变量、函数、类等。另外,还可以使用import
关键字来引入其他命名空间或模块中的内容。
要引入其他
TypeScript
文件中的命名空间内容,可以使用import
关键字。假设我们有一个名为MyNamespace
的命名空间定义在另一个文件myNamespace.ts
中,以下是在当前文件中引入该命名空间并使用其中定义的内容的示例:
ts
// 引入 MyNamespace 命名空间
import { MyNamespace } from './myNamespace';
// 使用 MyNamespace 中定义的变量和函数
const myNumber = MyNamespace.myNumber;
MyNamespace.sayHello({ name: 'John', age: 30 });
在这个示例中,使用 import
关键字引入了 ./myNamespace
文件中的 MyNamespace
命名空间,并使用该命名空间中定义的 myNumber
变量和 sayHello
函数。
需要注意的是,在被引入的文件(即 ./myNamespace
)中,需要使用 export
关键字将 MyNamespace
命名空间导出,例如:
ts
// myNamespace.ts
export namespace MyNamespace {
export const myNumber = 42;
export function sayHello(person: Person) {
console.log(`Hello, ${person.name}! You are ${person.age} years old.`);
}
}