在技术领域,新技术的出现总是伴随着争议。TypeScript(简称 TS)作为一门静态类型的 JavaScript 超集,自从推出以来,就引发了广泛的讨论。作为一名长期从事 JavaScript 开发的程序员,我最初对 TS 持怀疑态度。但经过几年的实践,我对 TS 有了更深入的理解和认识。在这篇博文中,我将分享我对 TS 的理解,我的个人经历,以及我是如何从一个 TS 的抵抗者变成拥护者的。
TS 自 2012 年诞生以来,发展非常迅速,目前已经得到了社区的广泛认可。有图有真香,通过 npm 下载量可以证明这一点。
在 TS 刚刚流行起来的时候,不少开发者,包括我在内,都对它持保留态度。我们担心 TS 的类型系统会限制 JS 的灵活性,增加开发的复杂度。而且,那时候社区中也有一些声音,认为 TS 可能只是一时的热潮,不会长久。
然而,随着时间的推移,TS 逐渐展现出其强大的生态和优势,越来越多的项目和库开始采用 TS。但也有一些开源库作者选择抛弃 TS,他们认为 TS 增加了开发和维护的成本,对于一些小型或者简单的项目来说,可能没有必要引入 TS。
以下是排名靠前的 10 大 JavaScript 错误,其中 9 个错误都是因为类型错误导致的。
尽管存在一些负面声音,但 TS 的采用率仍在逐年增长,特别是在需要类型安全性和改善开发者体验的项目中。TS 引入了静态类型检查,可以在编译时捕获类型错误,减少运行时错误,提高代码的稳定性和可靠性。此外,TS 的类型系统使得重构更加安全和容易,有助于维护代码的清晰度和一致性,减少因变更引入的系统腐化。
我们的系统会面临腐化的问题,随着时间推移,系统会引入变更,而变更则会带来风险,随着时间和风险积累,系统会变得越来越脆弱。如何避免腐化问题呢?主要有两个思路,一个是保证系统中接口的类型安全,一个是保证系统中接口的逻辑正确性。而 TS 的静态类型检查,可以保证接口的类型安全。
然而,TS 也存在一些未解决的问题。这其实也是社区中很多人诟病 TS 的地方。比如知乎上的热门问题:”TypeScript 刚刚流行起来,为什么大牛们就开始抛弃了?“。又比如一些项目宣布放弃 TS:
在我看来 TS 并不是一个银弹,它并不能解决所有问题。
下面,我将分享我的个人经历,以及我是如何从一个 TS 的抵抗者变成拥护者的。
回想起 5 年多前我第一次接触 TS 时的情景,内心充满了抵抗。那时,我已经有多年的 JavaScript(JS)开发经验,对 JS 的灵活性和自由度非常满意。TS 的类型系统让我感觉像是给自由奔跑的马加上了缰绳,限制了我的创造力。
然而,当我从 JS + React 技术栈转向 Angular + TS + RxJS 技术栈时,我的观点开始慢慢转变。最初的不适应让我感觉自己像是被迫吞下了苦果,但随着时间的推移,我开始适应并理解 TS 的价值。
我发现,在日常开发中,我们其实只用到了 TS 的 20%功能。大部分同事的 TS 水平也仅仅停留在入门阶段。面对困难时,我们经常使用 as、any 或者@ts-ignore 来绕过类型检查,虽然这些做法有时看似方便,但实际上并没有发挥 TS 的真正价值。
随着对 TS 的深入了解,我开始拥抱它。我认识到,TS 并不是解决所有问题的银弹,优秀的代码还是需要优秀的开发者来编写。但 TS 的类型系统确实能够显著提高代码的可维护性,尤其是在多人合作的项目中,类型定义能够提供清晰的接口规范,减少沟通成本。
即使是在个人项目中,几个月后回头查看自己的代码时,有了类型定义,也能更快地理解当时的设计思路。而且,现在有了像 GPT 这样的工具,生成类型定义变得更加轻松。
从开发库的角度来看,我认为 TS 和 JS 都是可行的选择。关键在于为库提供.d.ts 类型定义文件,这样无论是库的开发者还是使用者,都能享受到类型系统带来的好处。
作为一个实践者,我创建了jslib-base,这是一个可以快速创建现代 JavaScript 库的脚手架,兼容 TS 和 JS。使用它,你可以在短短 10 秒内创建出一个属于自己的库。
如果你还不了解 TS,或者刚刚入门,想深入学习 TS,可以看下我学习经验,我认为学习 TypeScript 的过程可以分为几个阶段:
通过这样的学习路径,你不仅能够熟练使用 TypeScript,还能够深入理解它的内部工作原理,从而更好地利用它来提高你的开发效率和代码质量。
通过对 TS 的理解和实践,我逐渐从一个抵抗者变成了一个拥护者。我相信,不管是 TS 还是其他任何技术,关键在于如何使用它们来提高我们的工作效率和代码质量。
如果你对 JS 库开发感兴趣,我推荐你阅读我的书《现代 JavaScript 库开发》。我希望通过这本书,能帮助你快速掌握并深入理解 JS 库的开发。
最后,我想说,不要羡慕别人成为大牛,我们都有成为大牛的潜力。只要不断学习、实践并拥抱新技术,我们就能成为自己领域的专家。让我们一起在技术的道路上不断前进,做自己的大牛吧!