16.TS NameSpace命名空间

152 阅读1分钟

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)
​