namespace命名空间 
介绍 
可用于避免全局变量造成的污染。
- 内部模块,主要用于组织代码,避免命名冲突。
- 命名空间内的类默认私有
- 通过 export 暴露,不通过export暴露,是无法读取的
- 通过 namespace 关键字定义
示例 
typescript
// 设置一个命名空间
export namespace B{
    // 需要使用export暴露出去
    export const a=1
}
console.log(B.a)编译后的js文件为:
javascript
"use strict";
// 设置一个命名空间
var A;
(function (A) {
    A.a = 1;
})(A || (A = {}));
// 🚀 ~ file: index.js:9 ~ A.a: 1
console.log("🚀 ~ file: index.js:9 ~ A.a:", A.a)可以看到,实际上是给变量套了一层function。
若不设置为export,编译后的js文件中的变量a用const定义,在外部不可读取其值:
javascript
"use strict";
// 设置一个命名空间
var A;
(function (A) {
    const a = 1;
})(A || (A = {}));
// 🚀 ~ file: index.js:9 ~ A.a: underfined
console.log("🚀 ~ file: index.js:9 ~ A.a:", A.a)嵌套命名空间 
typescript
// 设置一个命名空间
namespace A{
    export const a=1
    export namespace B{
        export const D=5
    }
}
console.log(A.B.D)//5编译后的JavaScript文件为:
javascript
"use strict";
// 设置一个命名空间
var A;
(function (A) {
    A.a = 1;
    let B;
    (function (B) {
        B.D = 5;
    })(B = A.B || (A.B = {}));
})(A || (A = {}));
console.log(A.B.D); //5抽离命名空间 
现在index2.ts文件中写入以下代码:
typescript
// export const a=1
export namespace B{
    // 需要使用export暴露出去
    export const a=1
}
console.log(B.a) // 1在index.ts中引入B为:
typescript
import { B } from './index2'
// 设置一个命名空间
namespace A {
    export const a = 1
    export namespace B {
        export const D = 5
    }
}
console.log(A.B.D, B) // 5 { a: 1 }简化命名空间 
typescript
import { B } from './index2'
// 设置一个命名空间
namespace A {
    export const a = 1
    export namespace B {
        export const D = 5
    }
}
console.log(A.B.D, B)//5 { a: 1 }
import AB=A.B
// 🚀 ~ file: index.ts:13 ~ AB: 5
console.log("🚀 ~ file: index.ts:13 ~ AB:", AB.D)命名空间的合并 
跟interface一样,遇到重名的就合并起来:
typescript
namespace A{
    export const a=1
}
namespace A{
    export const b=2
}
console.log(A.a)//1
console.log(A.b)//2