JS vs TS二分法博弈对比分析

 更新时间:2024年01月21日 15:18:36   作者:大家的林语冰 人猫神话  
这篇文章主要介绍了JS vs TS二分法博弈对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

JS vs TS二分法博弈

在“JS 教”和“TS 教”的圣战中,除了狂热的虔信徒,还有像 up 主这种佛系的“无神论者”所以 JS 和 TS 互利共生或许可以成为“二极管思维”的第三个正确的选择。

本期《前端翻译计划》共享的是一种偏向实用主义的前端技术立场,惟愿 JS 和 TS 从此握爪言和,别再搞窝里斗,愿前端生态从此世界核平,赞美女神~

DHH 最近发布的关于 Turbo 8 转身出轨 JS,和 TS “和平分手”的博客,刹那间前端人集体破防,TS 爱好者和“类型体操受害者”开始对线,俺也不例外。夭寿啦,我甚至不知道 Turbo 8 是什么鬼物,但私以为本人也可以自由言论。就在几周前,在下将两个最大的项目之一迁移到了 TS,同时保留了另一个使用 JS 的项目,目前这正是本人的最佳选择,没有之一,成年人全都要,喵星人才选择困难。

免责声明

本文属于是语冰的直男翻译了属于是,略有删改,仅供粉丝参考,英文原味版请传送 JavaScript or TypeScript? How To Benefit From the Dichotomy

在解释本人的动机之前,让我先免责声明 —— 我既喜欢静态类型的严谨性,也喜欢动态类型的易用性。在花了多年时间编写 PHP、Python、JS、TS、Go 以及一点点 Java 和 Rust 后,我学会了鉴赏这 2 种编程范式。我十分享受至死不渝地追求正确的类型,然后沉醉于它们提供的安全套,同时我完全拥抱动态类型系统的自由,快速地组合东东。于我而言,这只是 2 种一龙一猪的乐趣。

虽然但是,我更享受实用主义。其主要目标旨在项目开发的各个阶段快速迭代,如果说这意味着技术的改变,那就且当做是这样吧。

前端项目测试

现在,回到我最近的经历。自去年 12 月以来,我一直致力于 2 个巨型前端项目:

  • 一个是经典的带有 API 的“网站”

  • 一个是非经典的高度动态的 Kubernetes Explorer SPA(单页应用程序)

我不是专业的前端开发者,我构建 UI 的策略一直是“不断更改代码,直到它一切顺利,并且研发之旅的阻力越少越好。”尽管我尊重和热爱静态类型语言,但在开发的早期阶段,当代码库可以在一周内多次完全重写时,类型可能是障碍之一。这就是我使用 JS 启动这两个项目的原因。

9 个月转瞬即逝,我仍然对在“网站”中使用 JS 心满意足。该项目是 UI(Vue)和 API(Nuxt)组件的结晶。 UI 组件丰富但简单 —— 大多数时候,当我发现 UI 回归时,这是由于 CSS 或 HTML 的更改,而不是因为我搞乱了代码。

API 并不那么简单 —— 传统的 BFF(backend for frontend)逻辑(比如授权/身份验证、数据转换等)与自定义课程管理和车队编排逻辑交织在一起,并分布在数十个 API 处理程序中。这种架构(或缺乏这种架构)可能会显着减慢开发速度,但与 UI 组件不同,API 表面是一个更加稳定的领域。为它编写黑盒测试理所当然。

最初,这些测试旨在成为一个验收套件,用于端到端检查系统,包括远远超出 JS API 的组件(即上游服务)。但时过境迁,它们也成为验证 JS 代码更改的主要手段。我对这个项目的现状心满意足 —— 仅通过一组测试就实现了一大坨目标,并且不需要繁重的 TS 机械,我还能奢求什么呢?

Kubernetes Explorer SPA 迁移到 TS

那么,为何我还决定将另一个项目 Kubernetes Explorer SPA 迁移到 TS 呢?

答案在于该项目提出了不同的约束和需求。与 iximiuz Labs 网站的主要复杂性聚焦于 API 层不同,Kubernetes Explorer 最头大的部分是它的 UI 组件。

Explorer 的主要逻辑驻留在浏览器运行的代码中,这事关重大。在没有类型提示的情况下,处理大量属性或构建 Kubernetes 对象的复杂图头皮发麻,并且在没有类型检查或测试的情况下重构这样的代码库已被证明十分容易翻车。

在对资源管理器的 UI 进行另一次大型更改之后(其中回归搜索花费的时间比实际重写的时间更长),我决定是时候优化 DX(开发者体验)了。本质上,我有 2 个选择:

  • 开始为 UI 组件编写测试

  • 引入类型系统

测试自然棒棒哒,而且它们与我的其他项目无缝衔接,但根据以往的经验,对于快速变化的领域,测试弊大于利。维护测试套件可能会成为一种真正的负担,并且开发者往往会越来越依赖经过高度测试的组件,当它们不再适合 UI 时,就很难舍弃它们。

与此同时,到目前为止,我在项目中遇到的大多数回归都是,由于缺少属性或一种形状的对象,意外传递给需要不同形状对象的函数导致的 —— 编译器的辅助通常可以避免此问题。因此,我决定将项目迁移到 TS,并暂时将测试数量保持在最低限度。2 周后重写了 3 次,我对自己的选择心满意足。

我将来会向 Kubernetes Explorer 添加更多 UI 测试吗?大概也许可能吧。我会将网站迁移到 TS 吗?大概也许可能吧。有一天我会恢复使用此 App 的 JS 吗?答案是肯定的,前提是我发现它可以辅助我快速迭代。

当然,您的里程可能会有所不同。项目的性质差异很大,且没有一种通用的语言或解决方案。我的个人建议是,保持务实,选择最佳工具,避免教条主义的条条框框。

以上就是JS vs TS二分法博弈对比分析的详细内容,更多关于JS TS二分法对比的资料请关注脚本之家其它相关文章!

相关文章

  • json原理分析及实例介绍

    json原理分析及实例介绍

    这次在项目中前后台的数据交互中用到了json,经过这段时间的使用,简单总结一下json的原理与使用,需要了解的朋友可以参考下
    2012-11-11
  • 使用ionic在首页新闻中应用到的跑马灯效果的实现方法

    使用ionic在首页新闻中应用到的跑马灯效果的实现方法

    在app中经常会有滚动的跑马灯效果的运用,接下来通过本文给大家介绍使用ionic在首页新闻中应用到的跑马灯效果的实现方法,需要的的朋友参考下
    2017-02-02
  • 使用JavaScript实现node.js中的path.join方法

    使用JavaScript实现node.js中的path.join方法

    Node.JS中的 path.join 非常方便,能直接按相对或绝对合并路径,有时侯前端也需要这种方法,如何实现呢?感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • 利用PHP实现递归删除链表元素的方法示例

    利用PHP实现递归删除链表元素的方法示例

    这篇文章主要给大家介绍了关于如何利用PHP实现递归删除链表元素的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 微信小程序实现select二级下拉

    微信小程序实现select二级下拉

    这篇文章主要为大家详细介绍了微信小程序实现select二级下拉效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • QT与javascript交互数据的实现

    QT与javascript交互数据的实现

    本文主要介绍了QT与javascript交互数据的实现,主要包括数据从QT流向JS以及数据从JS流向QT的几种方法,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 跟我学习javascript的闭包

    跟我学习javascript的闭包

    跟我学习javascript的闭包,这篇文章的目的就是让大家对javascript闭包有一个非常全面的了解,感兴趣的小伙伴们可以参考一下。
    2015-11-11
  • 微信小程序利用Canvas绘制图片和竖排文字详解

    微信小程序利用Canvas绘制图片和竖排文字详解

    这篇文章主要介绍了微信小程序利用Canvas绘制图片和竖排文字详解,合成图片应该按照 Canvas 的文档来做都没什么问题,主要是有个竖排文字的需求,这里和大家分享一下,需要的朋友可以参考下
    2019-06-06
  • js验证表单大全

    js验证表单大全

    js验证表单大全...
    2006-11-11
  • js自动闭合html标签(自动补全html标记)

    js自动闭合html标签(自动补全html标记)

    假如我有一个DIV,如果没有闭合后面的样式都会乱了,这样的代码可能会影响后面的样式,我希望用JS去自动闭合这种没有闭合的标签
    2012-10-10

最新评论