简介
概述
TypeScript(简称 TS)是微软公司开发的一种基于 JavaScript (简称 JS)语言的编程语言。
它的目的并不是创造一种全新语言,而是增强 JavaScript 的功能,使其更适合多人合作的企业级项目。
TypeScript 可以看成是 JavaScript 的超集(superset),即它继承了后者的全部语法,所有 JavaScript 脚本都可以当作 TypeScript 脚本(但是可能会报错),此外它再增加了一些自己的语法。
TypeScript 对 JavaScript 添加的最主要部分,就是一个独立的类型系统。
类型的概念
类型(type)指的是一组具有相同特征的值。如果两个值具有某种共同的特征,就可以说,它们属于同一种类型。
动态类型与静态类型
什么是动态类型
可以随意改变变量类型就是动态类型
什么是静态类型
什么变量的类型后,类型不可以改变
静态类型的优点
有利于代码的静态分析
- 有了静态类型,不必运行代码,就可以确定变量的类型,从而推断代码有没有错误。这就叫做代码的静态分析。
- 这对于大型项目非常重要,单单在开发阶段运行静态检查,就可以发现很多问题,避免交付有问题的代码,大大降低了线上风险
有利于发现错误。
由于每个值、每个变量、每个运算符都有严格的类型约束,TypeScript 就能轻松发现拼写错误、语义错误和方法调用错误,节省程序员的时间。
let obj = { message: '' }; console.log(obj.messege); // 报错
上面示例中,不小心把
message
拼错了,写成messege
。TypeScript 就会报错,指出没有定义过这个属性。JavaScript 遇到这种情况是不报错的。const a = 0; const b = true; const result = a + b; // 报错
上面示例是合法的 JavaScript 代码,但是没有意义,不应该将数值
a
与布尔值b
相加。TypeScript 就会直接报错,提示运算符+
不能用于数值和布尔值的相加。function hello() { return 'hello world'; } hello().find('hello'); // 报错
上面示例中,
hello()
返回的是一个字符串,TypeScript 发现字符串没有find()
方法,所以报错了。如果是 JavaScript,只有到运行阶段才会报错。更好的 IDE 支持,做到语法提示和自动补全。
IDE(集成开发环境,比如 VSCode)一般都会利用类型信息,提供语法提示功能(编辑器自动提示函数用法、参数等)和自动补全功能(只键入一部分的变量名或函数名,编辑器补全后面的部分)。
提供了代码文档
类型信息可以部分替代代码文档,解释应该如何使用这些代码,熟练的开发者往往只看类型,就能大致推断代码的作用。借助类型信息,很多工具能够直接生成文档。
有助于代码重构
修改他人的 JavaScript 代码,往往非常痛苦,项目越大越痛苦,因为不确定修改后是否会影响到其他部分的代码。
类型信息大大减轻了重构的成本。一般来说,只要函数或对象的参数和返回值保持类型不变,就能基本确定,重构后的代码也能正常运行。如果还有配套的单元测试,就完全可以放心重构。越是大型的、多人合作的项目,类型信息能够提供的帮助越大。
综上所述,TypeScript 有助于提高代码质量,保证代码安全,更适合用在大型的企业级项目。这就是为什么大量 JavaScript 项目转成 TypeScript 的原因。
静态类型的缺点
静态类型也存在一些缺点。
丧失了动态类型的代码灵活性。
动态类型有非常高的灵活性,给予程序员很大的自由,静态类型将这些灵活性都剥夺了。
增加了编程工作量。
有了类型之后,程序员不仅需要编写功能,还需要编写类型声明,确保类型正确。这增加了不少工作量,有时会显著拖长项目的开发时间。
更高的学习成本。
类型系统通常比较复杂,要学习的东西更多,要求开发者付出更高的学习成本。
引入了独立的编译步骤。
原生的 JavaScript 代码,可以直接在 JavaScript 引擎运行。添加类型系统以后,就多出了一个单独的编译步骤,检查类型是否正确,并将 TypeScript 代码转成 JavaScript 代码,这样才能运行。
兼容性问题。
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 版本发布。