当前位置:首页 > 科技  > 软件

反驳来了!放弃TypeScript?说明你无知!

来源: 责编: 时间:2023-09-18 21:42:25 436观看
导读作者 | Robert Vitonsky编译 | 云中几天前,汉森 (David Heinemeier Hansson)宣布 Turbo8 即将放弃 TypeScript。我心想:放弃就放弃吧,反正我也不知道 Turbo 8 是什么鬼。然而,在过去的几年里,一些前端程序员试图向我推销“

作者 | Robert Vitonskyr6V28资讯网——每日最新资讯28at.com

编译 | 云中r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

几天前,汉森 (David Heinemeier Hansson)宣布 Turbo8 即将放弃 TypeScript。我心想:放弃就放弃吧,反正我也不知道 Turbo 8 是什么鬼。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

然而,在过去的几年里,一些前端程序员试图向我推销“ TypeScript 没用,只测着玩玩”的想法。我认为,有这种观点的人要么不关心代码质量,要么根本不知道 TypeScript 是什么。在这里,我将解释为什么应该使用 TypeScript。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

注:本文作者 Vitonsky 是一名超过10年的有着复杂项目的前端大牛,参与了许多开源项目的开发:比如翻译网站的浏览器插件 Linguist、模块 UI 工具ElegantUI、翻译 DOM 节点的 DomTranslator 库等等。r6V28资讯网——每日最新资讯28at.com

1、代码质量控制的“好手”

r6V28资讯网——每日最新资讯28at.com

代码质量控制是一个保持代码可维护性的复杂过程。你不能仅仅用 100% 的测试覆盖代码,或者审查每个拉取请求并确保你的代码是可维护的,还应该让除你之外的其他人也可以识别并搞定它。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

根本无法保证自己的代码没有 bug 的同时具有完美的可维护性。你只能在存储库中增加防御结构,以使其难以推送带有错误的“炸弹”代码。阻止“炸弹”代码的障碍越多,代码质量就越好。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

这意味着你应该一起使用所有方法来保护存储库中的代码:单元/e2e/集成测试、代码审查、代码分析工具以及维护清晰的文档等。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

TypeScript 是一个强大的代码分析工具;它可以检测代码中的许多缺陷。TypeScript 编译器迫使程序员确保代码在类型级别上是正确的。David 和许多其他人低估了静态类型的价值。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

让我们看看 TypeScript 为代码质量带来了哪些好处。r6V28资讯网——每日最新资讯28at.com

2、contract 对代码的重要性

r6V28资讯网——每日最新资讯28at.com

静态类型允许在代码中定义 contract。 r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

type Participant = { id: string; name: string;};function sayHi(participant: Participant) { //... console.log(`Hi ${participant.name}`);}

r6V28资讯网——每日最新资讯28at.com

该 sayHi 函数需要一个具有精确属性和精确类型的对象,并且它不关心该函数的用户将做什么来满足要求。编译器确保类型正确。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

用户可能会提供一个不符合要求的对象并将类型强制转换为 any,但这不是函数 sayHi 的问题。这是一种责任委托,是开发人员必须理解的一个重要概念,才能正确使用 TypeScript 并获得其好处。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

程序员必须验证任何不受信任的数据,例如用户输入和其他 IO 数据,或与 JavaScript 互操作的结果。验证和设置类型后,他们可以将数据传递给 TypeScript 代码,并相信合同将得到遵守,因为 TypeScript 编译器已经检查了代码。如果程序员强制转换类型,他们必须确保代码在运行时正确。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

如果你将项目中的非相交类型转换为任何非 unknown 的类型(没有运行时验证),那么代码质量可能存在问题。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

contract 可以避免为每个函数编写验证以确保数据正确。这对于性能和代码整洁度来说都很好,代码变得愚蠢而简单。r6V28资讯网——每日最新资讯28at.com

3、使用JS造成的不好经验和成本

r6V28资讯网——每日最新资讯28at.com

有时我会用纯 JavaScript 编写代码,主要是在浏览器控制台中,以便在网页上进行快速计算或数据解析。几个月前,我为 Node.js 编写了一个使用 ChatGPT 翻译区域设置文件的脚本。这些文件包含长文本,而 ChatGPT 有限制,因此需要一些时间对文本进行切片、翻译、在ChatGPT的结果中查找错误、根据需要重新翻译,然后将切片重新连接在一起。根据区域设置文件的大小,此过程大约需要 3-5 分钟。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

在这个过程中,由于一些琐碎的类型错误,我浪费了一些时间,比如忘记使用 wait,这导致一个变量包含 Promise,并将“[object Promise]”写入文件而不是翻译文本,或者将错误的对象作为函数参数提供。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

TypeScript 消除了这样的错误。r6V28资讯网——每日最新资讯28at.com

4、 TS更面向未来

r6V28资讯网——每日最新资讯28at.com

TypeScript 为你的代码提供了其他工具分析的潜力,因为它添加了上下文。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

使用 IDE,你可以重命名接口中的属性,并且实现该接口的所有实体将自动在各自的位置更新属性的名称。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

ChatGPT 和 Copilot 等 AI 工具受益于 TypeScript 提供的附加元信息,有可能改进代码分析和代码生成。这些分析工具可以更好地识别潜在风险的代码。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

静态类型和测试相得益彰。前端代码是高度异步的,这使得覆盖所有可能的测试用例并考虑所有潜在的代码状态,变得非常有挑战性。TypeScript 迫使程序员处理一个状态可能具有的所有可能情况,从而增强代码可靠性。r6V28资讯网——每日最新资讯28at.com

5、类型:复杂性与质量的取舍

r6V28资讯网——每日最新资讯28at.com

汉森还说道说:r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

“TypeScript 对我来说只是阻碍。不仅因为它需要显式的编译步骤,还因为它用‘类型体操’污染了代码,这给我的开发体验增添了很少的乐趣,而且常常带来相当大的悲伤。应该容易的事情变得困难,而困难的事情变成了‘any’。所以不用了,谢谢!”r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

确实,有时必须编写重要的类型,才能让编译器相信你的数据是正确的。但事实就是这样:创建高质量的可维护代码通常需要付出艰苦的努力。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

6、结论:会用的人不会抱怨工具

r6V28资讯网——每日最新资讯28at.com

TypeScript 只是一个工具,如果你简单地启用它,它不会自动提高代码质量。你的项目必须制定正确使用该工具的规则,以及执行这些规则的架构师。规则越严格越好。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

当在项目中禁用静态类型时,你将失去许多控制代码质量的功能。r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

JS 文档和 .d.ts 类型声明文件无法替代代码的静态类型。它们只是声明实体外部 API 的方法,但不允许分析实体内的代码(函数、类和其他代码块)。 r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

原文链接:https://vitonsky/blog/2023/09/08/typescript-and-code-quality/r6V28资讯网——每日最新资讯28at.com

r6V28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10491-0.html反驳来了!放弃TypeScript?说明你无知!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 得物SRE视角下的蓝绿发布

下一篇: Nginx map 实现时间格式转换

标签:
  • 热门焦点
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top