请看下面的 JavaScript 代码。

静态类型有很多好处,这也是 TypeScript 想要达到的目的。 类型系统通常比较复杂,要学习的东西更多,要求开发者付出更高的学习成本。

修改他人的 JavaScript 代码,往往非常痛苦,项目越大越痛苦,因为不确定修改后是否会影响到其他部分的代码。
上面的例二,变量y是一个对象,有一个属性foo,但是这个属性是可以删掉的,并且还可以新增其他属性。所以,对象有什么属性,这个属性还在不在,也是动态的,没法提前知道。
(4)提供了代码文档。
    类型信息大大减轻了重构的成本。一般来说,只要函数或对象的参数和返回值保持类型不变,就能基本确定,重构后的代码也能正常运行。如果还有配套的单元测试,就完全可以放心重构。越是大型的、多人合作的项目,类型信息能够提供的帮助越大。
类型信息大大减轻了重构的成本。一般来说,只要函数或对象的参数和返回值保持类型不变,就能基本确定,重构后的代码也能正常运行。如果还有配套的单元测试,就完全可以放心重构。越是大型的、多人合作的项目,类型信息能够提供的帮助越大。 如果你对 JavaScript 还不熟悉,建议先阅读《JavaScript 教程》和《ES6 教程》,再来阅读本书。
JavaScript 语言就没有这个功能,不会检查类型对不对。开发阶段很可能发现不了这个问题,代码也许就会原样发布,导致用户在使用时遇到错误。

上面的例一,变量x声明时,值的类型是数值,但是后面可以改成字符串。所以,无法提前知道变量的类型是什么,也就是说,变量的类型是动态的。 微软推出这门语言的主要目的,是让 JavaScript 程序员可以参与 Windows 8 应用程序的开发。
上面的例二,变量y是一个对象,有一个属性foo,但是这个属性是可以删掉的,并且还可以新增其他属性。所以,对象有什么属性,这个属性还在不在,也是动态的,没法提前知道。

这就是说,TypeScript 的最初动机是减少 .NET 程序员的转移和学习成本。所以,它的很多语法概念跟 .NET 很类似。

如果你对 JavaScript 还不熟悉,建议先阅读《JavaScript 教程》和《ES6 教程》,再来阅读本书。 上面的代码在 TypeScript 里面都会报错。

修改他人的 JavaScript 代码,往往非常痛苦,项目越大越痛苦,因为不确定修改后是否会影响到其他部分的代码。

前面说了,TypeScript 的主要功能是为 JavaScript 添加类型系统。大家可能知道,JavaScript 语言本身就有一套自己的类型系统,比如数值123和字符串Hello。

总的来说,这些缺点使得 TypeScript 不一定适合那些小型的、短期的个人项目。

如果你对 JavaScript 还不熟悉,建议先阅读《JavaScript 教程》和《ES6 教程》,再来阅读本书。

TypeScript(简称 TS)是微软公司开发的一种基于 JavaScript (简称 JS)语言的编程语言。
如果你对 JavaScript 还不熟悉,建议先阅读《JavaScript 教程》和《ES6 教程》,再来阅读本书。

微软推出这门语言的主要目的,是让 JavaScript 程序员可以参与 Windows 8 应用程序的开发。
作为比较,TypeScript 是在开发阶段报错,这样有利于提早发现错误,避免使用时报错。另一方面,函数定义里面加入类型,具有提示作用,可以告诉开发者这个函数怎么用。

修改他人的 JavaScript 代码,往往非常痛苦,项目越大越痛苦,因为不确定修改后是否会影响到其他部分的代码。

(3)更好的 IDE 支持,做到语法提示和自动补全。

TypeScript 的作用,就是为 JavaScript 引入这种静态类型特征。

(3)更高的学习成本。

如果你对 JavaScript 还不熟悉,建议先阅读《JavaScript 教程》和《ES6 教程》,再来阅读本书。

有了类型之后,程序员不仅需要编写功能,还需要编写类型声明,确保类型正确。这增加了不少工作量,有时会显著拖长项目的开发时间。
静态类型有很多好处,这也是 TypeScript 想要达到的目的。 请看下面的 JavaScript 代码。

静态类型的优点

2023年,TypeScript 5.0 版本发布。

另外,TypeScript 是一个开源项目,接受社区的参与,核心的编译器采用 Apache 2.0 许可证。微软希望通过这种做法,迅速提高这门语言在社区的接受度。

上面的代码在 TypeScript 里面都会报错。
上面的代码在 TypeScript 里面都会报错。

另外,TypeScript 是一个开源项目,接受社区的参与,核心的编译器采用 Apache 2.0 许可证。微软希望通过这种做法,迅速提高这门语言在社区的接受度。

举例来说,123和456这两个值,共同特征是都能进行数值运算,所以都属于“数值”(number)这个类型。
JavaScript 语言就没有这个功能,不会检查类型对不对。开发阶段很可能发现不了这个问题,代码也许就会原样发布,导致用户在使用时遇到错误。

IDE(集成开发环境,比如 VSCode)一般都会利用类型信息,提供语法提示功能(编辑器自动提示函数用法、参数等)和自动补全功能(只键入一部分的变量名或函数名,编辑器补全后面的部分)。
上面的例二,变量y是一个对象,有一个属性foo,但是这个属性是可以删掉的,并且还可以新增其他属性。所以,对象有什么属性,这个属性还在不在,也是动态的,没法提前知道。

TypeScript 对 JavaScript 添加的最主要部分,就是一个独立的类型系统。
    请看下面的 JavaScript 代码。

    类型信息大大减轻了重构的成本。一般来说,只要函数或对象的参数和返回值保持类型不变,就能基本确定,重构后的代码也能正常运行。如果还有配套的单元测试,就完全可以放心重构。越是大型的、多人合作的项目,类型信息能够提供的帮助越大。

总的来说,这些缺点使得 TypeScript 不一定适合那些小型的、短期的个人项目。
静态类型的缺点

可以这样理解,类型是人为添加的一种编程约束和用法提示。 主要目的是在软件开发过程中,为编译器和开发工具提供更多的验证和帮助,帮助提高代码质量,减少错误。
TypeScript 的历史

TypeScript 对 JavaScript 添加的最主要部分,就是一个独立的类型系统。

上面示例中,例一的报错是因为变量赋值时,TypeScript 已经推断确定了类型,后面就不允许再赋值为其他类型的值,即变量的类型是静态的。例二的报错是因为对象的属性也是静态的,不允许随意增删。

类型系统通常比较复杂,要学习的东西更多,要求开发者付出更高的学习成本。

IDE(集成开发环境,比如 VSCode)一般都会利用类型信息,提供语法提示功能(编辑器自动提示函数用法、参数等)和自动补全功能(只键入一部分的变量名或函数名,编辑器补全后面的部分)。

上面示例中,函数addOne()传入了一个字符串hello,TypeScript 发现类型不对,就报错了,指出这个位置只能传入数值,不能传入字符串。
TypeScript 对 JavaScript 添加的最主要部分,就是一个独立的类型系统。

有了类型之后,程序员不仅需要编写功能,还需要编写类型声明,确保类型正确。这增加了不少工作量,有时会显著拖长项目的开发时间。
静态类型也存在一些缺点。

静态类型也存在一些缺点。