摘要:大部分使用过Type的后端开发者都对Type有很好的印象,Type现在在后端领域也占据着核心。 然而typescript库开发,在库开发者眼中,Type 其实是非常不友好的,本文作者也这么认为。 你在使用Type的时候有遇到过这样的问题吗?
原文链接:
作者|埃里克·鲍尔
译者| 新月
出品| CSDN(ID:CSDNnews)
以下为译文:
作为一名后端开发人员,我特别喜欢 TypeScript。 我认为 TypeScript 大大减少了自动编写手动测试的需要,减轻了编写和维护手动测试的负担,并提高了开发人员的工作效率。
然而,作为一名库开发人员,我绝对讨厌 TypeScript。 我认为Type不适合库开发。 原因有很多,但归根到底是因为Type降低了开发者的生产力。 事实上,我觉得 TypeScript 将软件开发的复杂性从后端开发人员转移到了库开发人员身上,给每个希望成为 TypeScript 专家的人带来了巨大的负担。
文档
TypeScript 为前端开发人员提供了丰富的文档和博客文章,但为库开发人员提供的资源却很少。 我为库开发人员找到的唯一一本是关于类型操作()的介绍。
也许是因为他们觉得库开发人员和后端开发人员没有区别,我不同意这一点。
为什么Type的官网没有提供任何关于库开发的手册? 还有为库开发人员推荐的工具手册吗?
事实上,TypeScript 的应用程序开发和库开发之间存在巨大差距。 Web 应用程序很少需要条件类型、类型运算符和重载等构造。 但库开发人员大量使用了这种结构。 这种构造是高度动态的,并将逻辑合并到类型中。 这导致我对Type的调试感到失望。
库开发人员如何调试高度动态且频繁使用的条件类型和负载? 唯一可用于调试的工具是 TypeScript 的编译器和专业知识。 您可以更改代码并查看类型最终如何。 在我看来,没有比库开发人员的直觉更好的解决方案了。
据我所知,库开发人员广泛使用的唯一工具是 Type Playground,在这个环境中,他们可以隔离类型的逻辑并研究类型将一种类型解析为另一种类型的动机。 据悉,您还可以在此环境中轻松更改 Type 的版本和配置。
如果你知道什么 TypeScript 调试工具,请不吝指教,因为我写这篇文章不仅仅是为了抱怨,也是希望高手赐教。
复杂
我已经使用 redux 很长时间了,在我看来 redux-toolkit 是一个很棒的库,你可以用它来查看真实的代码库如何使用类型。 我不得不说,它们的类型很棒,但复杂性却令人震惊。
下面是两个反例:
这个代码库充满了复杂的类型。 请注意类型数量与实际代码量。 我粗略统计了一下(忽略导出的代码),文件中只有10%左右的代码被翻译成了js代码(js代码:35行,总代码:330行)。
样式手册总是说不要使用嵌套三元运算符。 然而,在Type中,你只能使用这些方法来根据其他类型来缩小类型的范围。
测试
因为类型可以从其他类型生成,但这些类型是高度动态的,所以任何严肃的 TypeScript 项目都需要一种新的测试类型:测试类型。 在最新版本的类型编译器上测试类型是不够的,您还需要针对以前的版本进行测试。
这种新型测试还处于起步阶段,相关工具要么已弃用,要么处于半维护状态。 我使用过的库如下:
该领域存在大量人才流失typescript库开发,并且我的一些项目至今仍在使用已弃用的库,因为迁移代码可能会很痛苦。
实际上推荐的工具只有两个:dtslint 和 tsd。 为什么我们需要两种工具来完成大致相同的工作? 这是非常具有欺骗性的。
维持
类型可以显着减少代码量。 第一次尝试向项目贡献代码时,您必须了解应用程序的逻辑以及类型的逻辑。 这样会减轻我们的心理压力,同时代码量也会大大减少。 作为一个反例,我帮助维护 redux-saga,现在大多数拉取请求和议程都与类型相关。
我花在调整类型上的时间比编码库的时间多得多。
我其实对 Type 很熟悉,但不是专家。 事实上,我花了很多年时间编写 TypeScript 代码,但作为一名库开发人员,我从来没有足够的知识来使用 TypeScript,这让我感到羞愧。 语言能力实际上是一个先决条件。 类型加剧了维护 js 库的难度,并且使向这些库贡献代码变得更加困难。
总结
我非常喜欢 TypeScript,但我也同意 TypeScript 对后端开发有很大帮助。 Typeface彻底改变了后端开发的格局,我们很难忽视它所带来的巨大影响。
但作为库开发人员,我们需要:
我只是想弄清楚为什么Type会将一段代码解析为特定类型,并且不需要我阅读Type编译器的源代码,对吗?
☞受骗行为大奖:“植入”硬核芯片到手上,就为了解锁汽车?
☞腾讯在会上连续两次致歉:登录失败已恢复; 越南电商巨头Shopee发生大规模违约; Deno1.25发布|极客头条
☞谷歌解密史上最重软件:36斤C/C++编译器!