简介
概述
TypeScript 是一个由微软开发的开源的编程语言,它是 JavaScript 的一个超集,添加了编译时的静态类型,能够在开发阶段提前规避掉很多错误。
什么是类型
类型是一种约束,它约束了变量、函数的输入和输出、约束了对象的结构、约束了函数的参数结构、约束了函数的返回值结构。
就像一个定义一个变量,你给他一个string
类型,那你就就不能再给他赋一个number
类型的值。
动态类型与静态类型
编程语言中,有动态类型和静态类型之分。
- 静态语言:变量需要在定义给定类型,且不能赋值除这个类型之外的类型。
- 动态语言:变量在定义时不需要给定类型,可以赋值任何类型。
JavaScript 就是一门个动态类型语言,TypeScript 是一个编译时静态类型语言。
为什么说 TypeScript 是编译时静态类型语言呢?
因为 TypeScript 是 JavaScript 的超集,它最终会被编译成 JavaScript,所以 TypeScript 是在编译时进行类型检查的。
使用 TypeScript 好处
(1)有利于代码的静态分析
有了静态类型,不必运行代码,就可以确定变量的类型,从而推断代码有没有错误。这就叫做代码的静态分析。
这对于大型项目非常重要,单单在开发阶段运行静态检查,就可以发现很多问题,避免交付有问题的代码,大大降低了线上风险。
(2)有利于发现错误。
由于每个值、每个变量、每个运算符都有严格的类型约束,TypeScript 就能轻松发现拼写错误、语义错误和方法调用错误,节省程序员的时间。
(3)更好的 IDE 支持,做到语法提示和自动补全。
IDE(集成开发环境,比如 VSCode)一般都会利用类型信息,提供语法提示功能(编辑器自动提示函数用法、参数等)和自动补全功能(只键入一部分的变量名或函数名,编辑器补全后面的部分)。
(4)提供了代码文档。
类型信息可以部分替代代码文档,解释应该如何使用这些代码,熟练的开发者往往只看类型,就能大致推断代码的作用。借助类型信息,很多工具能够直接生成文档。
(5)有助于代码重构。
修改他人的 JavaScript 代码,往往非常痛苦,项目越大越痛苦,因为不确定修改后是否会影响到其他部分的代码。
类型信息大大减轻了重构的成本。一般来说,只要函数或对象的参数和返回值保持类型不变,就能基本确定,重构后的代码也能正常运行。如果还有配套的单元测试,就完全可以放心重构。越是大型的、多人合作的项目,类型信息能够提供的帮助越大。
综上所述,TypeScript 有助于提高代码质量,保证代码安全,更适合用在大型的企业级项目。这就是为什么大量 JavaScript 项目转成 TypeScript 的原因。
静态类型的缺点
静态类型也存在一些缺点。
(1)丧失了动态类型的代码灵活性。
动态类型有非常高的灵活性,给予程序员很大的自由,静态类型将这些灵活性都剥夺了。
(2)增加了编程工作量。
有了类型之后,程序员不仅需要编写功能,还需要编写类型声明,确保类型正确。这增加了不少工作量,有时会显著拖长项目的开发时间。
(3)更高的学习成本。
类型系统通常比较复杂,要学习的东西更多,要求开发者付出更高的学习成本。
(4)引入了独立的编译步骤。
原生的 JavaScript 代码,可以直接在 JavaScript 引擎运行。添加类型系统以后,就多出了一个单独的编译步骤,检查类型是否正确,并将 TypeScript 代码转成 JavaScript 代码,这样才能运行。
(5)兼容性问题。
TypeScript 依赖 JavaScript 生态,需要用到很多外部模块。但是,过去大部分 JavaScript 项目都没有做 TypeScript 适配,虽然可以自己动手做适配,不过使用时难免还是会有一些兼容性问题。
总的来说,这些缺点使得 TypeScript 不一定适合那些小型的、短期的个人项目。
TypeScript 的历史
下面简要介绍 TypeScript 的发展历史。
2012 年,微软公司宣布推出 TypeScript 语言,设计者是著名的编程语言设计大师 Anders Hejlsberg,他也是 C# 和 .NET 的设计师。
微软推出这门语言的主要目的,是让 JavaScript 程序员可以参与 Windows 8 应用程序的开发。
当时,Windows 8 即将发布,它的应用程序开发除了使用 C# 和 Visual Basic,还可以使用 HTML + JavaScript。微软希望,TypeScript 既能让 JavaScript 程序员快速上手,也能让 .Net 程序员感到熟悉。
这就是说,TypeScript 的最初动机是减少 .NET 程序员的转移和学习成本。所以,它的很多语法概念跟 .NET 很类似。
另外,TypeScript 是一个开源项目,接受社区的参与,核心的编译器采用 Apache 2.0 许可证。微软希望通过这种做法,迅速提高这门语言在社区的接受度。
2013 年,微软的 Visual Studio 2013 开始内置支持 TypeScript 语言。
2014 年,TypeScript 1.0 版本发布。同年,代码仓库搬到了 GitHub。
2016 年,TypeScript 2.0 版本发布,引入了很多重大的语法功能。
2018 年,TypeScript 3.0 版本发布。
2020 年,TypeScript 4.0 版本发布。
2023 年,TypeScript 5.0 版本发布。