TS从入门到精通(九)namespace命名空间

711 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

命名空间

我们在工作中无法避免全局变量造成的污染,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,它可以告诉编译器在编译过程中要引入的额外的文件

如果你在配置文件 配置了noResolve 或者自身调用自身文件会报错