内部模块:namespace
或module
关键字
宣言
内部模块可以使用namespace
或module
关键字声明。然后我们可以决定使用export
关键字公开我们内部模块的哪一部分。
// LivingThings.ts
export namespace Animals {
export class Dog { }
export class Cat { }
}
export namespace Plants {
export class Orchid { }
export class Bamboo { }
}
// LivingThingsUser.ts
import { Animals, Plants } from "./LivingThings"
逻辑分组
在 ES6 之前,Typescript 使用内部模块来封装接口、类、函数和变量,以支持一组相关功能并隐藏实现细节。这样我们可以防止变量泄漏到全局空间中。这有助于更好地组织代码并防止名称冲突。现在推荐使用外部模块(ES6 模块)来实现这一点。
内部模块现在用于环境命名空间声明。
单个文件使用
我们可以跨多个文件声明内部模块,并且可以使用--outFile
标志将它们连接起来。<script>
然后,我们可以在 HTML 页面的标签内使用该连接文件。这允许我们在包含所有依赖项的客户端 Web 应用程序中以良好的方式构建我们的代码。
外部模块:justexport
和import
关键字
宣言
外部模块也称为 ES6 模块。我们使用多个文件对相关功能进行分组,并且只使用export
关键字使所需对象公开可见。
// Animals.ts
export class Dog { }
export class Cat { }
// Plants.ts
export class Orchid { }
export class Bamboo { }
// LivingThingsUser.ts
import { Dog, Cat } from "./Animals"
import { Orchid, Bamboo } from "./Plants"
逻辑分组
逻辑分组是通过使用单独的文件对相关功能进行分组来实现的。因此,外部模块也称为文件模块。
单个文件使用
我们不使用<script>
标签加载客户端 Web 应用程序的外部模块,因为浏览器可能会在下载这么多文件并同时呈现页面时变得迟缓。为此,我们使用 CommonJS、AMD、SystemJS 等模块加载器,它们使我们能够异步加载文件或将外部模块文件连接到单个优化文件中。
对于服务器端,尤其是在 Node.js 中,强烈建议使用外部模块。
命名法
为了声明内部模块,打字稿团队建议使用namespace { }
代替module { }
语法以避免与外部模块混淆。因为外部模块现在只是“模块”,而内部模块是“命名空间”。
就是这样!