一、命名空间
TypeScript 中的命名空间(Namespace)用于将代码组织到逻辑分组中。在 TypeScript 中,命名空间是一个独立作用域中的代码集合。
1、示例
下面是一个简单的 TypeScript 命名空间示例:
namespace MyNamespace {export interface Person {name: string;age: number;}export function printPerson(person: Person) {console.log(`Name: ${person.name}, Age: ${person.age}`);}
}let person: MyNamespace.Person = { name: "John", age: 30 };
MyNamespace.printPerson(person);
在这个示例中,
MyNamespace是一个命名空间,其中包含一个接口Person和一个函数printPerson。注意,我们需要使用export关键字将Person和printPerson导出以便在外部使用。在使用命名空间中的类型和函数时,需要使用命名空间前缀。例如,我们需要使用
MyNamespace.Person和MyNamespace.printPerson来访问命名空间中的类型和函数。
2、引用
2.1、import
要在 TypeScript 文件中引用另一个命名空间,可以使用
import语句。假设我们有一个名为MyNamespace的命名空间,它位于myNamespace.ts文件中,可以按如下方式进行引用:
import * as MyNamespace from './myNamespace';// 使用 MyNamespace
MyNamespace.someFunction();
在上面的示例中,
import语句将MyNamespace命名空间中的所有内容导入当前文件中的一个对象。你可以通过该对象来访问命名空间中的成员。要访问命名空间中的某个属性或方法,可以使用点符号(.)操作符,如MyNamespace.someFunction()。
如果你知道要访问的成员的类型,也可以使用单独导入语法,如下所示:
import { someFunction } from './myNamespace';// 使用 someFunction
someFunction();
在上面的示例中,只导入了
MyNamespace命名空间中的someFunction函数。这样,你就可以直接使用someFunction()而不是MyNamespace.someFunction()来调用该函数。
2.2、/// <reference>
 
在 TypeScript 中,可以使用
/// <reference>指令来引用一个命名空间中的类型或值。当一个命名空间在一个单独的 TypeScript 文件中时,可以使用/// <reference>指令将其引入到当前文件中。
例如,假设有一个名为 myNamespace 的命名空间,定义在 myNamespace.ts 文件中,现在需要在另一个 TypeScript 文件中使用它,可以在该文件的顶部添加以下代码:
/// <reference path="./myNamespace.ts"/>// 在此处可以使用 myNamespace 中的类型或值
其中,
path属性指定了需要引用的文件路径。这样,就可以在当前 TypeScript 文件中使用myNamespace命名空间中的类型或值了。
需要注意的是,如果使用模块化的方式来组织代码,则不需要使用
/// <reference>指令来引用命名空间,而是可以使用import语句来导入命名空间中的类型或值。
3、嵌套命名空间
在 TypeScript 中,可以使用嵌套的命名空间来组织代码。嵌套命名空间的语法如下:
namespace OuterNamespace {export namespace InnerNamespace {// code goes here}
}
在这个例子中,
InnerNamespace是OuterNamespace的一个嵌套命名空间。要在命名空间中使用另一个命名空间中的内容,可以使用import语句,如下所示:
namespace OuterNamespace {export namespace InnerNamespace {export const foo = 'Hello';}
}namespace AnotherNamespace {import InnerNamespace = OuterNamespace.InnerNamespace;console.log(InnerNamespace.foo); // Output: 'Hello'
}
在这个例子中,通过使用
import语句将OuterNamespace.InnerNamespace导入到AnotherNamespace中,然后就可以访问InnerNamespace中的内容了。