1.内部模块,主要用于组织代码,避免命名冲突
2.命名空间内的类默认为私有
3.通过export暴露
4.通过namespace关键字定义
TS和ES5一样 任何包含顶级import或者export的文件都会当成模块处理,相反的如果没有,那就作为全局可见的。
基本操作
// A.ts
// 最终会编译为一个立即执行函数 然后在函数中给传入的A对象赋值name属性
namespace A {
export const name = 'Yang'
}
console.log(A.name);
namespace B{
export const name = 'ZGR'
}
console.log(B.name);
嵌套命名空间
// A.ts
// 套娃 编译完毕就是在函数A中创建函数B然后还是执行一样的操作
namespace A {
export const name = 'Yang'
namespace B {
export const name = 'Yang'
}
}
console.log(A.name);
抽离命名空间
// 导出命名空间 然后可以在其他文件中import导入
export namespace B{
export const name = 'ZGR'
}
console.log(B.name);
简化命名空间
namespace A {
export const name = 'Yang'
export namespace B {
export const age = 23
export namespace C {
export const sex = '男'
}
}
}
// 想拿到 sex
console.log(A.B.C.sex)
// 可以通过 import 关键字简化操作
import ABC = A.B.C
console.log(ABC.sex)
合并命名空间
// namespace A {
// export const name = 'Yang'
// }
// namespace A {
// export const age = 23
// }
// 和interface一样相同的命名空间会合并
// 最终会变为这样 =>
namespace A {
export const name = 'Yang'
export const age = 23
}
console.log(A.name)