为什么以及何时使用 TypeScript

数字与非类型语言的优点已经争论了几十年。静态类型的参数包括:

  1. 安全性:类型系统允许尽早捕获许多错误,而无需运行代码。可以将 TypeScript 配置为允许更少的编程错误
  2. 可读性:显式类型使代码更易于人类理解。正如弗雷德布鲁克斯写道 :“告诉我你的流程图并隐藏你的桌子,我将继续神秘化。告诉我你的桌子,我通常不需要你的流程图;它们将是显而易见的。”
  3. 工具:类型系统使计算机更容易理解代码。这允许 IDE 和 linters 等工具更强大。
  4. 性能:类型系统通过减少运行时类型检查的需要使代码运行得更快。

由于 TypeScript 的输出与其类型无关 ,因此 TypeScript 对性能没有影响。使用 TypeScript 的论据取决于其他三个优点。

针对类型系统的争论包括:

  1. 增加了复杂性:类型系统可能比它们描述的语言运行时更复杂。高阶函数可以很容易地正确实现,但很难输入 。处理类型定义会给使用外部库带来额外的障碍。
  2. 添加了详细程度:类型注释可以为你的代码添加样板,使底层逻辑更难以遵循。
  3. 较慢的迭代:通过引入构建步骤,TypeScript 会减慢编辑/保存/重新加载周期。
  4. 不完整性:类型系统既不健全又完整。TypeScript 不允许使用正确的程序。TypeScript 接受的程序仍然可能包含错误。类型系统不能减轻测试需求。如果使用 TypeScript,则可能需要等待更长时间才能使用新的 ECMAScript 语言功能。

TypeScript 提供了一些解决所有这些问题的方法:

  1. 增加复杂性。如果键入程序的一部分太困难,可以使用不透明的 any 类型在很大程度上禁用 TypeScript。外部模块也是如此。
  2. 增加了详细程度。这可以部分通过类型别名和 TypeScript 推断类型的能力来解决。编写清晰的代码既是一门艺术也是一门科学:删除太多类型的注释,代码可能不再为人类读者所清楚。
  3. 较慢的迭代:构建步骤在现代 JS 开发中相对常见,TypeScript 已经与大多数构建工具集成 。如果 TypeScript 提前发现错误,它可以为你节省整个迭代周期!
  4. 不完全性。虽然这个问题无法完全解决,但随着时间的推移,TypeScript 已经能够捕获越来越多的表达性 JavaScript 模式。最近的例子包括在 TypeScript 2.1 中添加映射类型在 2.2 中添加 mixins

支持和反对类型系统的参数通常同样适用于 TypeScript。使用 TypeScript 会增加启动新项目的开销。但随着时间的推移,随着项目规模的扩大和更多的贡献者的增加,人们希望使用它(安全性,可读性,工具性)的优点变得更强大,超过缺点。这体现在 TypeScript 的座右铭:“可扩展的 JavaScript”。