TypeScript学习(十七):模块解析 | 八月更文挑战

这是我参与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

方法一:使用 --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 关键字。

Ambient Namespaces

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
复制代码
相关文章
相关标签/搜索