📅  最后修改于: 2023-12-03 14:48:05.669000             🧑  作者: Mango
TypeScript 命名空间(namespace)是一种将有关联的代码、类、接口、函数和变量组合在一起的方式。命名空间可以避免全局命名冲突和“命名烦恼”的问题,同时也使得代码更易于维护和理解。
在 TypeScript 中,我们可以通过 namespace
关键字来定义一个命名空间。例如:
namespace MyNamespace {
export const PI = 3.14;
export function calculateCircumference(diameter: number) {
return diameter * PI;
}
export class Circle {
constructor(private diameter: number) {}
get circumference(): number {
return calculateCircumference(this.diameter);
}
}
}
上面的代码中,我们定义了一个名为 MyNamespace
的命名空间,它包含了一个常量 PI
、一个函数 calculateCircumference
和一个类 Circle
。注意,在命名空间中,所有的成员默认都是私有的,需要使用 export
关键字将其公开。
要在其他文件中使用命名空间中的成员,我们需要使用 ///<reference path="path/to/filename.ts"/>
指令来引用。
例如,假设我们将上面的命名空间保存在了 myNamespace.ts
文件中,我们可以这样引用:
///<reference path="./path/to/myNamespace.ts"/>
const circle = new MyNamespace.Circle(10);
console.log(circle.circumference); // 31.4
在上面的代码中,我们引用了 myNamespace.ts
文件,并且成功地创建了一个 MyNamespace.Circle
类的实例,并计算了它的周长。
除了使用 ///<reference>
指令来引用命名空间,我们还可以将一个命名空间导出,并在其他文件中导入。
例如,我们可以将上面的 myNamespace.ts
文件改成这样:
export namespace MyNamespace {
export const PI = 3.14;
export function calculateCircumference(diameter: number) {
return diameter * PI;
}
export class Circle {
constructor(private diameter: number) {}
get circumference(): number {
return calculateCircumference(this.diameter);
}
}
}
注意,我们在命名空间前加了 export
关键字,这样它就可以被其他文件导入了。然后,我们可以在其他文件中这样导入命名空间:
import { MyNamespace } from "./path/to/myNamespace";
const circle = new MyNamespace.Circle(10);
console.log(circle.circumference); // 31.4
在上面的代码中,我们使用 import
关键字将 myNamespace.ts
文件中的 MyNamespace
命名空间导入。这样,我们就可以直接使用 MyNamespace
中的成员了。
最后,需要注意的是,命名空间可以嵌套,可以在一个命名空间中包含另一个命名空间。这样做可以更好地组织代码,并避免命名冲突。例如:
namespace MyNamespace {
export namespace Geometry {
export const PI = 3.14;
export function calculateCircumference(diameter: number) {
return diameter * PI;
}
export class Circle {
constructor(private diameter: number) {}
get circumference(): number {
return calculateCircumference(this.diameter);
}
}
}
}
在上面的代码中,我们在 MyNamespace
中定义了一个 Geometry
命名空间,将与几何学相关的代码放在这个命名空间中。这样,我们就可以更好地组织代码了。