(5)兼容性问题。

(3)更好的 IDE 支持,做到语法提示和自动补全。 本书假定读者已经了解 JavaScript 语言,就不再介绍它的语法了,只介绍 TypeScript 引入的新语法,主要是类型系统。
TypeScript 的历史

2014年,TypeScript 1.0 版本发布。同年,代码仓库搬到了 GitHub。

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

上面示例中,hello()返回的是一个字符串,TypeScript 发现字符串没有find()方法,所以报错了。如果是 JavaScript,只有到运行阶段才会报错。
动态类型有非常高的灵活性,给予程序员很大的自由,静态类型将这些灵活性都剥夺了。
微软推出这门语言的主要目的,是让 JavaScript 程序员可以参与 Windows 8 应用程序的开发。

(4)提供了代码文档。

(1)有利于代码的静态分析。
(4)引入了独立的编译步骤。

(2)有利于发现错误。
(2)有利于发现错误。
综上所述,TypeScript 有助于提高代码质量,保证代码安全,更适合用在大型的企业级项目。这就是为什么大量 JavaScript 项目转成 TypeScript 的原因。

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

本书假定读者已经了解 JavaScript 语言,就不再介绍它的语法了,只介绍 TypeScript 引入的新语法,主要是类型系统。
一旦确定某个值的类型,就意味着,这个值具有该类型的所有特征,可以进行该类型的所有运算。凡是适用该类型的地方,都可以使用这个值;凡是不适用该类型的地方,使用这个值都会报错。

它的目的并不是创造一种全新语言,而是增强 JavaScript 的功能,使其更适合多人合作的企业级项目。

类型信息可以部分替代代码文档,解释应该如何使用这些代码,熟练的开发者往往只看类型,就能大致推断代码的作用。借助类型信息,很多工具能够直接生成文档。
本书假定读者已经了解 JavaScript 语言,就不再介绍它的语法了,只介绍 TypeScript 引入的新语法,主要是类型系统。

(2)增加了编程工作量。

动态类型有非常高的灵活性,给予程序员很大的自由,静态类型将这些灵活性都剥夺了。

学习 TypeScript,必须先了解 JavaScript 的语法。因为真正的实际功能都是 JavaScript 引擎完成的,TypeScript 只是添加了一个类型系统。
类型信息可以部分替代代码文档,解释应该如何使用这些代码,熟练的开发者往往只看类型,就能大致推断代码的作用。借助类型信息,很多工具能够直接生成文档。

上面示例是合法的 JavaScript 代码,但是没有意义,不应该将数值a与布尔值b相加。TypeScript 就会直接报错,提示运算符+不能用于数值和布尔值的相加。
请看下面的 JavaScript 代码。 JavaScript 语言就没有这个功能,不会检查类型对不对。开发阶段很可能发现不了这个问题,代码也许就会原样发布,导致用户在使用时遇到错误。 (5)有助于代码重构。
可以这样理解,类型是人为添加的一种编程约束和用法提示。 主要目的是在软件开发过程中,为编译器和开发工具提供更多的验证和帮助,帮助提高代码质量,减少错误。

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

下面简要介绍 TypeScript 的发展历史。

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

(2)有利于发现错误。

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

上面的例二,变量y是一个对象,有一个属性foo,但是这个属性是可以删掉的,并且还可以新增其他属性。所以,对象有什么属性,这个属性还在不在,也是动态的,没法提前知道。 静态类型的优点

正是因为存在这些动态变化,所以 JavaScript 的类型系统是动态的,不具有很强的约束性。这对于提前发现代码错误,非常不利。
(3)更好的 IDE 支持,做到语法提示和自动补全。

这就是说,TypeScript 的最初动机是减少 .NET 程序员的转移和学习成本。所以,它的很多语法概念跟 .NET 很类似。
上面的例一,变量x声明时,值的类型是数值,但是后面可以改成字符串。所以,无法提前知道变量的类型是什么,也就是说,变量的类型是动态的。 本书假定读者已经了解 JavaScript 语言,就不再介绍它的语法了,只介绍 TypeScript 引入的新语法,主要是类型系统。
    这对于大型项目非常重要,单单在开发阶段运行静态检查,就可以发现很多问题,避免交付有问题的代码,大大降低了线上风险。
    (3)更高的学习成本。