Skip to content
On this page

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.`);
  }
}

Released under the MIT License.