嘉宾 | 许侃
编辑 | 贾亚宁
用过 TypeScript 的开发者往往都会不约而同地直呼“真香”,但是我们也无法忽略 TypeScript 诸如学习曲线较陡和开发成本较高等阻碍。因此如何高效地使用和掌握 TypeScript,使其在中大型的项目中发挥最好的作用一直是大家讨论的热点话题。
本次我们邀请了 FreeWheel 的 Tech Lead 许侃老师,请他来分享对于 TypeScript 的应用和思考,同时许侃也是已经上线的 QCon+ 案例研习社「TypeScript 在中大型项目中的落地实践」专题的出品人,如果你对专题内容感兴趣,欢迎点击观看:https://time.geekbang.org/qconplus/album/72
TypeScript 适用场景
许侃:从我们组的切换体验来看,TypeScript 主要是在大规模协作中保证了代码质量,很多错误可以在本地开发环境中被及时发现。因此对于 TypeScript 的适用场景,我个人觉得:对于 3 人以上的团队如果有一个公共项目需要协作开发,那么选择 TypeScript 利大于弊,付出一定的类型定义成本和团队学习成本,可以长久地降低维护成本和提升代码质量。
另一种比较合适的场景则是团队内部的公共包,一来公共包的业务场景相对稳定,因此固定下来接口等类型定义相对来说不会有什么争议;二来通过暴露清晰的类型定义可以帮助调用方降低适配成本。
不适合的场景则因人而异,比如有人会觉得任何项目都应该用类型约束的 TypeScript 来撰写,有人则觉得 JavaScript 已经足够完成一些小型任务,不必非得“杀鸡用牛刀”。我的建议是:根据场景来选。如果时间紧、任务重,先上 JavaScript 一定是更合适的选择,类型欠缺之类的“债务”完全可以后面再去弥补。另一种就是小项目,代码少且意图足够清晰,搭配合适的单元测试一样可以保证高质量。
这里想谈一个比较现实的问题。很多 TypeScript 的拥趸者经常对 TypeScript 本身的上手成本避而不谈,这对于 TypeScript 的发展并不是一个好的事情。任何一项技术都是有其优缺点的,TypeScript 本身的上手成本恰恰是很多团队迟迟下不了决心的门槛。这个时候需要的是尽可能用一些可重复的实践经历来告诉还没采用的人——这条路的坑我们已经蹚过了,如果你们有意向,欢迎来试试。这也是当初我作为出品人做 TypeScript 案例研习社的初心之一,只有能落地的实践,才经得起时间的考验。
使用 TypeScript 重构
许侃:重构这件事本身其实业界也有很多讨论,推荐大家去阅读软件行业巨擘 Martin Fowler 老爷子的《重构》。首先作者鼎鼎大名自不必说,其次这次第二版使用的样例语言正是 JavaScript,对于前端工程师而言阅读体验会更为友好。
关于使用 TypeScript 去做重构,我们团队积累的实际经验分享一下:
老项目继续用 JavaScript 重构
许侃:代码迁移在我们团队内还有另一种表现形式——产品层面的变更。这也引发了我们团队内部继续使用 JavaScript 重构还是迁移到 TypeScript 的讨论。
产品层面的变更,主要是指随着时间迁移,产品面临几大变化——需要更换统一的前端 UI(组件行为层面和前端展示效果层面);需要调整一些产品功能来更好地服务客户需求(下线一些已有功能和增强一些已知功能)。对于一些老的项目,我们还是采用了迁移到更新的 JavaScript 版本的思路。主要是:
TypeScript 无意取代 JavaScript
许侃:从趋势而言,TypeScript 的路一定会越来越宽,但是并不能完全超过或取代 JavaScript。
TypeScript 在前端中大型项目协作上的优势,目前确实没有对手,这意味着这块的基本盘只会越来越稳固,同时逐步侵占目前尚未迁移到 TypeScript 的项目的空间。但正如前面所言,JavaScript 永远是第一选择,只有能活下来的项目才有机会去考虑偿还“类型债务”。另一方面,选用 TypeScript 所希望达到的较高项目质量、较低文档维护成本等愿景,前端社区一样有着其他的选择,前端社区极度繁荣和活跃,作为开发者选择让自己最高效的工具即可,不必拘泥于 TypeScript。
另外想聊个题外话,最近 TypeScript 团队在 TC39 提出了一个将类型标注应用到现在的 JavaScript 代码的提案。大意是引入一种新的语法,会被 JavaScript 运行时忽略,但是 TypeScript、Flow 等 JavaScript 的超集或方言可以利用这个来继续提供类型检查等能力,但是免去了开发过程中的构建过程。提案本身刚刚进入了 Stage 1 阶段,未来可期。可以看出 TypeScript 团队一直在思考如何更好地服务 JavaScript 构筑起来的世界(而不是取代),所以就让 TypeScript 的归 TypeScript,JavaScript 的归 JavaScript 吧。
团队 Leader 在推广 TypeScript 重构中的角色
许侃:团队 Leader 其实可以做的事情很多,从我的个人经验总结来看,主要是以下三部分:
积累技术势能
许侃:我从两个角度来分享一下:
所谓“闻道有先后,术业有专攻”,保持谦虚谨慎的态度,多向身边人和社区学习,这个时代学习技术的门槛越来越低,但学习技术的审慎态度要保持。
最后,如果你对我们团队做的事情有兴趣,欢迎联系:kxu@apac.freewheel.com
嘉宾介绍
许侃
FreeWheel Tech Lead
《云原生应用架构:微服务开发最佳实战》作者之一,多项美国专利作者,InfoQ 文章作者,有多年开发和项目管理经验。目前专注于云原生在前后端落地的实践和数据可视化方向的探索。
活动推荐
在可预见的未来,TypeScript 将成为前端开发者必须掌握的开发语言之一。这门课程将从 TypeScript 的基础语法开始讲起,为你详细解读 TypeScript 的每个特性以及它与 JavaScript 的区别,并通过工程篇和实战篇的讲解,让你能够熟练使用 TypeScript 进行实战项目的开发,现开通超级会员,可立即解锁此专栏。
扫码开通会员,立省 129 元
免费看《TypeScript 开发实战》专栏