详细分析 TypeScript 命名空间

141 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

命名空间

什么是命名空间,命名空间 namespace,是一个在静态语言中常见的概念。它可以帮助我们更好地整理代码,并可避免命名冲突。命名空间一个最明确的目的就是解决重名问题。

命名空间可以看做是一个微型模块,当我们先把相关的业务代码写在一起, 又不想污染全局空间的时候, 我们就可以使用命名空间。本质就是定义一个大对象, 把变量/方法/类/接口...的都放里面。

命名空间和模块区别

  • 在程序内部使用的代码, 可以使用命名空间封装和防止全局污染
  • 在程序内部外部使用的代码, 可以使用模块封装和防止全局污染

总结: 由于模块也能实现相同的功能, 所以大部分情况下用模块即可

命名空间的使用

命名空间定义了标识符的可见范围,一个标识符可在多个名字空间中定义,它在不同名字空间中的含义是互不相干的。这样,在一个新的名字空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名字空间中。

举一个简单的例子,上小学的时候我们学校里有俩个人叫小明,我们很难区分和引用这俩个人,但是我们在他们前面加上命名空间的话,比如说:二班的小明和三班的小明,那么区分起来就容易多了,也不会因为重名而找错人了。

namespace erban{  
  export class xiaoming{  
     name:string ="小明";  
  }  
}  
  
namespace sanban{  
  export class xiaoming{  
      name:string ="小明";  
  }  
}  
var e = new erban.xiaoming();  
var s = new sanban.xiaoming();  
console.log(e.name);  
console.log(s.name);

以上定义了一个命名空间 erbansanban,如果我们需要在外部可以调用 erbansanban 中的类,则需要在类添加 export 关键字。

要在另外一个命名空间调用语法格式为:

erban.xiaoming();
sanban.xiaoming();

如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:

/// <reference path = "SomeFileName.ts" />