本文已参与「新人创作礼」活动,一起开启掘金创作之路。
命名空间
我们在工作中无法避免全局变量造成的污染,TypeScript提供了namespace 避免这个问题出现
TypeScript与ECMAScript 2015一样,任何包含顶级import或者export的文件都被当成一个模块。相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的(因此对模块也是可见的)
- 也就是说你在001.ts文件定义了一个别名为Person类型声明 它默认是全局的,你在002.ts文件中可以直接使用
- 项目中很少使用
export 导出使用该关键字 该文件变为模块该声明不再是全局变量 需要引入
namespace
- 内部模块,主要用于组织代码,避免命名冲突。
- 命名空间内的类默认私有
- 通过 export 暴露 不用export 导出是无法读取其值的
- 通过 namespace 关键字定义
namespace A {
export const Time: number = 1000
export const fn = <T>(arg: T): T => {
return arg
}
fn(Time)
}
namespace B {
export const Time: number = 1000
export const fn = <T>(arg: T): T => {
return arg
}
fn(Time)
}
A.Time
B.Time
命名空间嵌套
namespace A {
export const Time: number = 1000
export namespace Aa{
export let num:number=1000
}
}
A.Aa.num//1000c
命名空间合并
重名的命名空间会合并
namespace A {
export const Time: number = 1000
}
namespace A {
export const Time1: number = 2000
}
A.Time //1000
A.Time1 //2000
命名空间简化
如果嵌套多层命名空间写起来不方便这时可以简化一下
namespace A {
export namespace B {
export const C = 1
}
}
import X = A.B.C
console.log(X); //1
如果一个命名空间在一个单独的ts文件中应该使用 ///指令引用
///<reference path=""/>
或者export 导出 import 引入
- 三斜线指令是包含单个XML标签的单行注释。 注释的内容会作为编译器指令使用。
- 三斜线指令仅可放在包含它的文件的最顶端。 一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。 如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义
/// <reference path="..." />指令是三斜线指令中最常见的一种。 它用于声明文件间的 依赖。- 三斜线引用告诉编译器在编译过程中要引入的额外的文件。
- 你也可以把它理解成
import,它可以告诉编译器在编译过程中要引入的额外的文件