TypeScript 之模块

TypeScript 的官方文档早已更新,但我能找到的中文文档都还停留在比较老的版本。所以对其中新增以及修订较多的一些章节进行了翻译整理。

本篇翻译整理自 TypeScript Handbook 中 「Module」 章节。

本文并不严格按照原文翻译,对部分内容也做了解释补充。

模块(Module)

JavaScript 有一个很长的处理模块化代码的历史,TypeScript 从 2012 年开始跟进,现在已经实现支持了很多格式。不过随着时间流逝,社区和 JavaScript 规范已经收敛为名为 ES 模块(或者 ES6 模块)的格式,这也就是我们所知道的 import/export 语法。

ES 模块在 2015 年被添加到 JavaScript 规范中,到 2020 年,大部分的 web 浏览器和 JavaScript 运行环境都已经广泛支持。

本章将覆盖讲解 ES 模块和和它之前流行的前身 CommonJS module.exports = 语法,你可以在 Modules 章节找到其他的模块模式。

JavaScript 模块是如何被定义的(How JavaScript Modules are Defined)

在 TypeScript 中,就像在 ECMAScript 2015 中 ,任何包含了一个顶层 import 或者 export 的文件会被认为是一个模块。

相对应的,一个没有顶层导入和导出声明的文件会被认为是一个脚本,它的内容会在全局范围内可用。

模块会在它自己的作用域,而不是在全局作用域里执行。这意味着,在一个模块中声明的变量、函数、类等,对于模块之外的代码都是不可见的,除非你显示的导出这些值。

相对应的,要消费一个从另一个的模块导出的值、函数、类、接口等,它也需要使用导入的格式先被导入。

非模块(Non-modules)

在我们开始之前,我们需要先理解 TypeScript 认为什么是一个模块。JavaScript 规范声明任何没有 export 或者顶层 await 的 JavaScript 文件都应该被认为是一个脚本,而非一个模块。

在一个脚本文件中,变量和类型会被声明在共享的全局作用域,它会被假定你或者使用 outFile 编译选项,将多个输入文件合并成一个输出文件,或者在 HTML使用多个

你可能感兴趣的:(TypeScript 之模块)