前言
小伙伴们大家好。上篇文章中我们学习了TypeScript中的模块以及模块的几种导入导出方式,通过学习我们了解到模块可以很好的避免不同文件间变量函数等重名的问题(当然了模块的好处也不仅仅只有这一点)。前面说到模块可以很好的解决不同文件间的重名问题,那么同一个文件中有时候也是避免不了重名问题,那又该如何解决呢?不知道有没有小伙伴记得,在上篇文章中我们提到“在TypeScript1.5版本之前有两种模块:内部模块和外部模块,而在1.5以后内部模块更名为命名空间,外部模块则更名为模块”。而这个命名空间就可以很好的解决同一个文件中的重名问题,或者干脆说命名空间就是可以解决重名问题不管是同一文件还是不同的文件,只要不是同一个命名空间即可。下面我们就来看下命名空间又是个啥?
命名空间
前面已经提到TypeScript中的命名空间是由原来的内部模块更名而来,它的最明确的目的就是为了解决重名问题。了解了命名空间的作用,下面我们再来看下,命名空间是如何使用,它都有哪些t特点:
- 命名空间是通过关键字 **“namespace”**加 名称 来定义的,比如:namespace Shaps
- 同一个文件中可以定义多个相同或不同的命名空间
- 同一个命名空间也可以分割在不同的文件中定义,只要名称相同都认为它们是同一个命名空间
- 如果想在一个文件中引用其它文件中的命名空间时,需要通过三斜杠加reference标签的形式引入。如:/// < reference path=“文件路径” />
- 如果想在命名空间以外使用命名空间中的内容(变量、函数、类、接口等)时,被使用的内容必须要借助export导出,否则无法使用,也就是说只有通过export导出的内容才可以在命名空间外访问
- 访问同一个命名空间中的变量、函数、类名等内容时可以直接访问
- 如果访问不同命名空间中的变量、函数、类名等内容时,除了这些内容要通过export导出外,还需通过 命名空间.xxx 的形式进行访问
- 命名空间可以层层嵌套,就是说一个命名空间中可以包含其他命名空间,访问时同样也是用命名空间.命名空间.xxx 的形式进行访问,内层的命名空间也需要被export