“这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战”javascript
TS 1.5 开始内部模块用命名空间表示,外部模块用 module 表示。java
以文件为例:一份文件就能够看做是一个模块markdown
当文件内的代码愈来愈多的时候,咱们但愿可以有某种组织标准能够追踪类型而且不用担忧命名冲突。能够经过将对象包含在一个命名空间中( 非全局命名空间 )来解决这个问题。post
index.tsui
namesapce validator{
class Val{}
}
复制代码
在文件内部中能够经过 validator.Val 访问对象。若是须要在文件外部访问的话,须要加上 export 关键字。spa
应用体积膨胀的时候,更应该打散代码到各个文件中以便于维护。code
当文件分割以后,每一个文件都创立了相同的命名空间,而且这些文件中的命名空间须要互相链接、访问。行为上,就如同以前在同一份文件中同样。所以,须要添加引用标记。orm
index1.ts对象
namespace NS{
class Val1{}
}
复制代码
index2.tsip
/// <reference path="index1.ts"/>
namespace NS{
class Val2{}
}
复制代码
impl.ts
/// <reference path="index1.ts">
/// <reference path="index2.ts">
let val1 = new NS.Val1()
复制代码
一旦涉及到多文件,咱们必须确保每份文件的的代码都被编译。有两种方法能够确保:
方法一:使用 --outFile 将全部文件编译到一份文件中。编译器会自动按顺序将引用的文件编译完毕。
tsc --outFile sample.js impl.ts
复制代码
方法二:
固然,也可使用以下命令手动进行,最终会获得多份文件。
tsc --outFile sample.js index1.ts index2.ts impl.ts
复制代码
由于获得了多份编译后的文件,在使用的时候须要使用
<script src="index1.js" type="text/javascript" /><script src="index2.js" type="text/javascript" /><script src="impl.js" type="text/javascript" />
复制代码
可使用 import = A.B.C 为 命名空间 建立别名。注意与import = require("xxx")的区别。
namespace Shapes{
export namespace Polynes{
class Square()
}
}
import polynes = Shapes.Polynes
const square = new polynes.Square() // Same as 'new Shapes.Polygons.Square()'
复制代码
注意不要使用 require 关键字。
D3 定义了全局对象 d3。由于使用 d3 的时候是经过
declare namespace D3{
export interface Selectors{}
export interface Event{
x: number
}
export interface Base extends Selector(){
event: Event
}
}
declare var d3: D3.base
复制代码