最近看到一篇外网文章,挺有意思。TypeScript is Overrated
翻译过来就是:TypeScript 被高估了
地址:dioxmio.medium.com/typescript-…
文章主要讲了 6 点被高估的原因:
-
使代码库变得混乱:使用 TypeScript 时,我们会在代码库中添加很多冗长的代码。通过使用更清晰的参数和方法名称,我们的代码库应该已经是不言自明的了。我们不需要任何虚拟类型检查。
-
浏览器本身不支持 Typescript 语言:归根结底,无论如何我们都会发布 JavaScript 代码。我们将不得不在我们的工作流程中添加很多额外的步骤,只是为了最终得到一些 JavaScript 文件。这似乎很不切实际。
-
额外配置:为了能够使用 TypeScript,我们需要进行大量配置。我们需要掌握 tsconfig.json 配置。我们需要配置一个 Webpack 加载器来处理我们的 TypeScript 代码库。我们还必须不断更新我们的 TypeScript 库。每发布一个新版本,都会有一系列重大更改。这意味着每 4 个月左右的升级就会投入大量时间。
-
陡峭的学习曲线:TypeScript 语言比 JavaScript 复杂得多,习惯它并正确使用它需要一段时间。这增加了我们任务的复杂性。
-
与第三方的兼容性:一些第三方库不完全支持 TypeScript。有时我们可能会看到带有半生不熟的 TypeScript 支持和一些不一致接口的库。这使我们的任务变得更加困难和棘手。我们如何信任第三方 TypeScript 技能?
-
损害开发速度:
-
发展的关键方面之一是保持生产力。前面提到的所有问题都导致必须支付“TypeScript 税”。这极大地损害了我们的生产力。我们变得不那么敏捷,而且开发人员更受约束。
-
许多人主张 TypeScript 将使我们免于出现令人讨厌的错误。但是,该语言通过提供 any 或 Function 类型来避免选择退出类型。我们还可以使用 @ts-ignore 指令。所以没有真正的方法可以信任 Typescript。我们还能如何确保我们的代码库健壮且没有错误?通过大量投资测试。这是我们保持弹性代码库没有边缘情况的唯一可靠工具。
-
TypeScript 资产编译也减慢了我们的速度。
ts 的优缺点
通过 ai 搜索工具 www.perplexity.ai 分别搜 ts 的优点和缺点,得到以下内容
ts 优点
-
js 类型增强(变量参数等类型明确)
-
静态代码检查(减少边界错误)
-
更好的提示(vscode 提示)
-
有利于后期维护和升级(适合多人开发大项目)
一句话总结:减少错误
ts 缺点
-
一定的学习成本(新的语法特性)
-
增加开发工作量(需要更多时间来声明类型)
-
增加构建编译时间(需要进行静态类型检查)
-
代码阅读更复杂(只想看逻辑,类型多干扰)
-
虚假安全(过度依赖 ts 类型)
一句话总结:降低开发效率
什么时候用 ts
思考以下几个问题:
用 js 写代码遇到了什么问题?
有什么办法可以解决?
引入 ts 能不能解决?
投入产出比?
有没有其他合适的方法?
遇到的问题
最初只是为了彻底解决 js 缺乏类型限制的问题。
后来扩展出来 vscode 自动提示功能、ts 各种辅助插件、类型体操等,功能不断增多。
解决办法
除了 ts 以外,现在用到的有:jsdoc 注释,props 类型限制,判空以及函数类型判断。
node 则从数据库类型控制,接受的前端参数类型控制,jsdoc 注释,判空以及函数类型判断等做了比较严格的类型控制。
ts 解决了什么问题
在现有工具和条件下,实在的好处主要:类型提示,能一眼看到每个变量的类型。
ts 没有解的问题
从后端拿到的数据,字段数据类型是可能发生变化的,此时 ts 没用,还是得用函数做具体的类型判断和转化。
核心是 ts 只是介入打包前的代码,执行期间 ts 已经没了。
总结
什么时候用 ts?用到什么程度?
根据实际情况判断,有需要就加上,没需要就不加,不需要过多的神话和纠结,ts just a tool。
其他想法:是否可以根据变量命名直接做类型限制呢?