在 TypeScript 中,命名空间(Namespace)是一种用于组织和管理代码的机制,它可以避免全局作用域下的命名冲突,并将相关的代码封装在一个命名空间内。
任何包含顶级import或者export的文件都被当成一个模块。相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的。
以下是命名空间的基本用法和特点:
- 创建命名空间:
你可以使用 namespace 关键字来创建一个命名空间:
namespace MyNamespace {
export const message = "Hello from MyNamespace";
export function greet(name: string): string {
return `Hello, ${name}!`;
}
}
- 访问命名空间中的成员:
通过使用命名空间名称来访问其中的成员:
console.log(MyNamespace.message); // 输出:Hello from MyNamespace
console.log(MyNamespace.greet("Alice")); // 输出:Hello, Alice!
- 嵌套命名空间:
命名空间可以嵌套,以便更好地组织代码:
namespace OuterNamespace {
export namespace InnerNamespace {
export const value = 42;
}
}
console.log(OuterNamespace.InnerNamespace.value); // 输出:42
- 使用
export关键字:
在命名空间中,如果要在外部访问命名空间中的成员,需要使用 export 关键字进行导出。然后在外部文件中进行import {space2} from './index2.ts' 导入。此时会在index.js中用到define,需要在tsconfig.json 中将"module"改为CommonJS,才可以正常编译。
- 别名:
namespace A {
export namespace B {
export const c = 1
}
}
// 以下方式不可以通过 ts-node 去编译,会报错
import AAA = A.B
console.log(AAA.c); // 1
- 合并命名空间:
和 interface 一样,多次声明同一个命名空间将会合并成一个:
namespace A {
export const c = 1
}
namespace A {
export const d = 2
}
- 使用
/// <reference>三斜线指令:
在分散的文件中使用命名空间时,可以使用 /// <reference> 指令引入其他文件中的命名空间:(注意在使用三斜线指令时,tscofig中不能设置"moduleDetection": "force")
/// <reference path="path/to/other/file.ts" />
需要注意的是,在现代 TypeScript 中,命名空间的使用已经逐渐被模块化替代。模块化使用 import 和 export 关键字来管理代码,更加推荐用于组织项目的代码结构。
命名空间和模块的主要区别在于,命名空间是将代码划分为逻辑单元,⽽模块是按照⽂件划分
的。在使⽤模块时,可以使⽤ import 和 export 进⾏代码的导⼊和导出,可以更⽅便地组织和
管理代码。
1491

被折叠的 条评论
为什么被折叠?



