TypeScript - 介绍
提示
TypeScript 的 官网文档 (opens new window)
# 1. 什么是 TypeScript
在编程社区引入 20 多年后,JavaScript 已经发展成为全球最广泛应用的跨平台编程语言之一。最初,JavaScript 只是一种用于向网页添加简单交互的小型脚本语言,但它现在已经成为前端和后端应用程序开发的首选语言。随着程序的复杂性和规模不断增长,JavaScript 的语言特性未能跟上这些变化,导致开发大型应用程序时面临不少挑战。
TypeScript 由微软开发,是一种自由和开源的编程语言,它是 JavaScript 的超集,主要在 JavaScript 的基础上添加了可选的静态类型和基于类的面向对象编程功能。TypeScript 的设计目标是作为 JavaScript 程序的静态类型检查器,这意味着它能够在代码运行之前检测和修正类型错误,从而提高代码的可靠性和可维护性。
主要特点:
- 静态类型检查:在代码运行之前检测潜在的类型错误,帮助开发者在编写代码时发现并修复问题。
- 超集:TypeScript 包含 JavaScript 的所有功能,并在此基础上扩展了新的语法和功能。
- 编译器与工具:TypeScript 不仅有编译器用于处理语法,还包括语言工具用于与编辑器的集成。
发展历程:
- 下载量增长:TypeScript 在 npm 上的下载量每年翻倍增长。截止 2021 年 12 月,每周下载量超过 2200 万次,显示了其快速增长的趋势。
- 版本发布:从 2.0 版本开始,TypeScript 每两个月发布一个新版本。现在,发布周期已改为每三个月一次,每个周期包括一个月的新特性开发和 beta 版本发布,以及两个月的测试和 bug 修复,以确保发布的稳定性。
# 2. JS、ES、TS 的关系
1995 年:JavaScript
- 背景:网景公司为了在静态 HTML 页面上添加动态效果,由 Brendan Eich 设计了 JavaScript 语言。命名“JavaScript”是为了借助 Java 的知名度,但实际上与 Java 的关系并不大。
1997 年:ECMAScript
背景:为了使 JavaScript 成为全球标准,ECMA(欧洲计算机制造商协会)制定了 JavaScript 的标准,称为 ECMAScript。此标准旨在统一 JavaScript 的实现,确保语言的一致性。
ECMAScript 版本:
版本 发布时间 一般称呼 简称 第 1 版 1997 年 6 月 ECMAScript 1 ES1 第 2 版 1998 年 4 月 ECMAScript 2 ES2 第 3 版 1999 年 12 月 ECMAScript 3 ES3 第 4 版 2007 年 10 月草案 ECMAScript 4 ES4 第 5 版 2009 年 12 月 ECMAScript 5 ES5 第 6 版 2015 年 6 月 ECMAScript 2015 ES6 第 7 版 2016 年 6 月 ECMAScript 2016 ES7 第 8 版 2017 年 6 月 ECMAScript 2017 ES8 第 9 版 2018 年 6 月 ECMAScript 2018 ES9 第 10 版 2019 年 6 月 ECMAScript 2019 ES10 第 11 版 2020 年 6 月 ECMAScript 2020 ES11 第 12 版 2021 年 6 月 ECMAScript 2021 ES12
2015 年:TypeScript
背景:TypeScript 是 JavaScript 的超集,包含所有 JavaScript 的功能,并在此基础上扩展了静态类型、类、模块、接口等功能。它通过支持最新的 JavaScript 特性,如异步功能和 Decorators,帮助开发者构建健壮的应用程序。
关系图:
# 3. TypeScript 与 JavaScript 的区别
TypeScript | JavaScript |
---|---|
JavaScript 的超集:增加了静态类型、类、模块、接口等功能 | 脚本语言:用于创建动态网页 |
静态类型检查:编译期间可以发现并纠正错误 | 解释型语言:只能在运行时发现错误 |
强类型:支持静态和动态类型 | 弱类型:没有静态类型选项 |
最终编译成 JavaScript 代码:浏览器能够理解 | 直接在浏览器中使用 |
支持模块、泛型和接口 | 不支持模块、泛型或接口 |
支持 ES3、ES4、ES5 和 ES6+ 功能 | 不支持编译其他 ES3、ES4、ES5 或 ES6+ 功能 |
社区支持在增长中,但还不如 JavaScript 广泛 | 广泛的社区支持:大量文档和解决问题的支持 |
# 4. TypeScript 的竞争者有哪些?
TypeScript 的设计目标是为开发者提供一个用于编写和维护大型 JavaScript 项目的工具,帮助减少类型错误,并提供更强的类型支持和开发体验。然而,除了 TypeScript,还有一些其他工具和语言也提供类似的功能或与 TypeScript 在某些方面竞争:
# ESLint 和 TSLint
- ESLint 和 TSLint 都是静态代码分析工具,用于检测代码中的潜在问题和错误。虽然它们可以在代码中发现错误,但它们并没有添加新的语法或类型系统。
- TSLint 专为 TypeScript 设计,但随着 TypeScript 本身的进步,TSLint 已经被弃用,推荐使用 ESLint 加 @typescript-eslint/parser 进行 TypeScript 代码的 linting。
- 这些工具主要用于代码质量和风格检查,而非静态类型检查。它们常与 TypeScript 配合使用,作为补充工具来增强代码的质量控制。
# CoffeeScript
- CoffeeScript 是一种编译语言,旨在改进 JavaScript 的语法,使其更简洁和易读。它在编译时将 CoffeeScript 代码转换为 JavaScript 代码。
- CoffeeScript 和 TypeScript 的区别在于,CoffeeScript 主要关注于简化 JavaScript 的语法,而 TypeScript 主要是为 JavaScript 添加静态类型检查。
- 随着时间的推移,CoffeeScript 的流行度逐渐减少,因为它被认为过于复杂,并且与原生 JavaScript 的差异使得它在实际使用中变得不太受欢迎。
# Flow
- Flow 是 Facebook 开发的类型检查工具,旨在为 JavaScript 添加类型系统。它通过添加类型注释来增强 JavaScript 代码的类型安全性,并在编译时删除这些类型注释。
- Flow 和 TypeScript 的目标类似,但实现方式不同。Flow 偏向于类型系统的完备性(soundness),而 TypeScript 更关注于开发体验和实际使用中的合理性(completeness)。
- Facebook 的大型代码库使用 Flow,但由于其与 TypeScript 的不同目标和实现,TypeScript 的使用在开源社区中变得更为普遍。
# 其他语言和工具
JetBrains WebStorm:一个具有强大 JavaScript 和 TypeScript 支持的集成开发环境(IDE)。它通过自定义的引擎进行代码分析、重构和语法检查,对 TypeScript 提供了良好的支持。
编译到 JavaScript 的语言:如 Elm、ReScript 和 KotlinScript,这些语言提供了不同于 JavaScript 的类型系统,并能够编译成 JavaScript。它们通常专注于创建一个干净的类型系统,但其生态系统和社区支持相对较小。
WebAssembly (WASM):一种新的二进制指令格式,可以在浏览器中高效地执行。虽然 WASM 可以与 JavaScript 交互,但它并不是直接的 TypeScript 竞争者,而是作为一种补充技术用于提升性能。AssemblyScript 是一种可以编译为 WASM 的语言,它允许使用 TypeScript 的子集进行开发。
编译到 WASM 的语言:如 Rust、Go 和 Swift 等。这些语言可以编译为 WASM,提供不同的基本类型和功能。尽管它们与 TypeScript 在某些方面存在重叠,但它们主要用于不同的应用场景和目标平台。
# 5. TypeScript 的未来
# 对 TypeScript 的未来展望
目前,TypeScript 的最大障碍之一是需要构建工具进行类型检查。如果 JavaScript 语言本身能支持类型注释,TypeScript 的使用门槛将会大大降低。例如,可以通过注释的方式在 JavaScript 中定义类型:
const a/*: string */ = "1234";
这种注释方式不会影响 JavaScript 代码的运行,但可以为静态分析工具提供类型信息。这种方式类似于 TypeScript 的类型系统,但需要时间和努力才能实现。
Deno 是一个较新的项目,它通过将 TypeScript 编译到 JavaScript,提供了对 TypeScript 的本地支持,减少了类型检查的障碍。
# 现代竞争者
JetBrains WebStorm:提供强大的 TypeScript 支持的 IDE,集成了类型检查和重构功能。
编译到 JavaScript 的语言:如 Elm、ReScript 和 KotlinScript,这些语言的设计目标是与 JavaScript 进行交互,并提供更干净的类型系统。
WebAssembly (WASM):虽然 WASM 并不是直接的 TypeScript 竞争者,但它提供了新的可能性来提升性能。AssemblyScript 在这方面做了一些工作,将 TypeScript 编译为 WASM。
编译到 WASM 的语言:如 Rust、Go 和 Swift 等,这些语言可以编译到 WASM,并可能在未来的开发中发挥作用。
# TypeScript 在生态中的位置
TypeScript 希望在类型系统和编辑器工具领域进行创新,提供一种强大的类型系统,帮助开发者更好地管理代码复杂性。TypeScript 与 JavaScript 的关系密切,通过与 TC39 的合作,TypeScript 旨在推动语言特性的进步,并保持对现有 JavaScript 生态的兼容性。
# TypeScript 的受众
TypeScript 的受众包括:
- JavaScript 用户:通过提供额外的类型检查和工具支持。
- JS + JSDoc 用户:使用 JSDoc 注释来定义类型,并结合 TypeScript 的类型检查。
- TypeScript 用户:直接使用 TypeScript 作为编译器和语言工具。
- TypeScript 严格模式用户:使用 TypeScript 的严格模式以获得更强的类型检查。
# TypeScript 如何跟踪 JS 生态
TypeScript 团队通过以下方式跟踪和响应 JavaScript 生态中的变化:
- 通过 GitHub Issues 和社区反馈获取意见。
- 与微软内部团队合作,获取特性需求和调试支持。
- 通过 Gitter 和 Discord 等社区渠道建立联系。
- 通过内部工具进行用户测试和设计反馈。
- 紧密与 VS Code 团队合作,获取语言工具的反馈。
- 跟踪行业调查、编程语言概述以及从 TypeScript 迁移或迁入的博客文章。