开启掘金成长之旅!这是我参与「掘金日新计划 · 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);
以上定义了一个命名空间 erban 和 sanban,如果我们需要在外部可以调用 erban 和 sanban 中的类,则需要在类添加 export 关键字。
要在另外一个命名空间调用语法格式为:
erban.xiaoming();
sanban.xiaoming();
如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:
/// <reference path = "SomeFileName.ts" />