原文地址:Why I use TypeScript 作者:ddprrt
大家可能会发现,最近我的博客开始以TypeScript为中心。这看起来可能有点偏离我通常写的博客和倡导的内容:高性能、易访问性以及有弹性的网站。
很多人问我,为什么要大量使用TypeScript,为什么我将其视为日常工作的核心部分之一。让我通过与TypeScript的三次邂逅与大家阐述一下。
2012年11月——本地议会上的TypeScript
TypeScript发布一个月后,有人在我们的一次本地议会中展示了其功能特性,我甚至写了一篇关于TypeScript的博客。当时,我可以看到TypeScript带来的好处,但是依旧保持怀疑态度,尤其是看到我的朋友在使用TypeScript的时候。他们主要来自于后端,如Java和C#。这就是为什么他们需要强烈依赖于如抽象类、接口层级结构、工厂、静态类等等。而所有这些POOOP(面向对象编程的模式)和SHIT(层级结构接口树)需要在JavaScript中使用吗?
这不是JavaScript,而我喜欢JavaScript!因此,我摒弃了TypeScript。
2015年左右——尝试Angular
出于好奇,我尝试了即将发布的Angular版本,这是Angular 2的候选版本。而这个版本的Angular,将TypeScript推向了更高的流行程度。尝试过程中,我要做得的第一步就是非常严格的遵循所定义的类型。在代码中,需要通过各种注释和Angular装饰器以便让TypeScript理解你的代码。其中,any类型是我最好的朋友。
最终,我放弃了。我想我说过:TypeScript想要知道后端数据的结构类型,而我怎么知道?我甚至没有控制台来记录这些数据。
而且,这不是JavaScript,而我喜欢JavaScript!所以,我决定暂时远离TypeScript。平心而论,在当时我对Angular的了解十分有限。当然了,我想我也很愿意改变这一现象。
2018年陪产假——学习
我在2018年休了三个月的陪产假,并且有机会在宝宝睡觉的时候学到很多东西。我学习了新的编程语言,并且自认为应该尝试一下TypeScript和React。
在使用TypeScript时,我发现可以像使用JavaScript一样使用它。不会有对编译器的抱怨,也不需要额外的注释。另外,TypeScript会不断分析我的代码,在我每次编写时,编辑器可以在不做任何操作的情况下为我提供大量的代码信息。
如果是使用VSCode来编写JavaScript,你很可能无意识的就使用了TypeScript。TypeScript语言服务在编辑器后台运行,通过分析代码尽可能多的为你提供信息。这可以让你无需做任何操作就能获得良好的开发体验。
TypeScript成为了另外一个大脑,它比我更加了解我的代码。如果TypeScript在某些方面没分析到位,可以通过添加一些额外的类型信息让其理解。由于我们可以通过JavaScript做很多事情,因此TypeScript力求我们在代码中尽可能完整的编写所有的JavaScript代码结构类型。
这和TypeScript的设计目标十分吻合:
- 渐进式。这意味着当你需要的时候,可以随时使用TypeScript的功能特性。
- 广泛的类型推断。TypeScript能够理解你的JavaScript。
- 控制流分析。TypeScript能够帮助你缩小可能的类型范围。
- 紧跟ECMAScript标准。不会遇到未达到ECMAScript第3阶段的功能特性。
- 类型系统。TypeScript希望提供更好的方式来表达JavaScript。
- 工具化。TypeScript并不是在限制你,而是为你提供提高生产率的工具。
那个时候,我还在YouTube上看了很多有关介绍历史的JSConf老视频。我在JSConf.EU 2012上偶然发现了一份介绍TypeScript的视频,视频中Anders描述TypeScript的设计目标并没有太多改变。从一开始,TypeScript的目标就是成为JavaScript之上的类型层。而其语言特性是一个副作用,这些副作用基于先前标准化工作的大量尝试性功能,例如ES4。
所以,TypeScript就是JavaScript,具有优势的JavaScript。而我喜欢JavaScript,也喜欢优势。
我的方法:
- 编写JavaScript,要更乐意见到非any类型
- 每当想要有更好的类型时,请添加注释
- 当重新访问项目时,将类型作为额外的文档使用
- 远离任何将类型注释和JavaScript第3阶段特性混合使用的额外语言功能,这些已经成为过去式。
当你那样编写代码时,就很容易喜欢上TypeScript。这就是为什么我会经常使用它以及写关于TypeScript的原因。TypeScript可以帮助现在和未来的我以及我的伙伴了解编写时候的想法。
顺便说一句,如果你想获得收益又想避开编译步骤,可以查看这篇不是TypeScript的TypeScript。这实际上是有用的,例如Preact库提供了对TypeScript完整的支持和工具链,但仍然是通过JavaScript来编写和贡献代码。