1.6、谈谈Js和Ts的选型那些事儿

11/11/2022

#

本篇文章要比《谈谈架构那些事儿》要短很多,因为前端技术虽然五花八门,但是核心还是 javascript。
本文会结合我们实验室这十年的项目经验,以及开源这三年的百余家企业经验,还有身边一二线大厂、中型企业、小企业、国央企、政府科研院所等相关技术朋友的项目经验,还有“商业”、“成本”、“人员”、“团队”等其他方面的因素,来讲述这个选型;
我们希望,希望我们能以最普通、最简单的文字讲清楚“架构”,也希望无论你是初出茅庐的青涩少年、还是炉火纯青技术大佬,也都能看得懂。

# 一、背景与问题

SmartAdmin 2.X 提供了 javascripttypescript 双版本 供大家选择,那么肯定有人问,建议选择哪个呢?
我们已经在十多个项目上用了vue3 + typescript,且每个项目的页面都在200个页面以上;
我们已经在几十个项目上用了vue3 + javascript,且每个项目的页面都在200个页面以上;

故事: 这几年使用SmartAdmin的企业已经超过了百余家,出现过很多关于typescript的有意思的故事,甚至身边的企业,朋友还出现过盲目用typescript,为了typescripttypescript这种现象。

# 一、typescript

# 1.1、简介

官方定义:

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open source. TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.

翻译过来:TypeScript 是 JavaScript 的一个超集,可以编译为纯 JavaScript ,在任何浏览器、集群(服务器)、操作系统上面都可以运行,而且还开源。通过在JavaScript的基础上添加静态类型定义构建而成。 如下图: typescript

# 1.2、ts的本质

简单而言,ts就是它让js有类型了,且提供了其他更好用的方法,但是我们认为ts的核心还是让js有类型,所以我们关注点需要从 js和ts的选型上面,转移到:“我们的项目,是否需要强制类型检查上?”

强制类型检查的好处,列举下:

  • 不怕人员变动,因为有类型,好维护很多
  • 变量如果能确定是什么类型,开发人员心里要踏实的多,写出来的程序更有信心
  • 能为语言带来各种各样的工具,比如自动补全,静态检查,可靠的重命名变量名等
  • 人生苦短,多用代码提示
  • 因为有类型约束,团队开发就不会随意放肆,更能做到整齐划一

坏处:

  • 稍微多了个代码量而已
  • 写的没那么随意,会有类型处处受限

这是typescript的类型的 好坏之分,通过以上这些点,你会发现,这些坏处在好处面前一份不值。

# 二、问题

阅读到这里,你会觉得,那就不用想了,直接用typescript就好了。笔者最开始的时候也是这也认为的,但是后来随着使用越来越多,发现不是那么回事。

有个很有趣的现象,在我们认识的百余家企业中,有90%左右的企业在typescript项目中在有如下几个有意思的特征:

  • 这些企业近两年所有的项目都是typescript,但是在vscode中都会有类型检查警告
  • 几乎所有的开发人员都会在vscode关闭 typescript的警告提醒
  • 项目中大量的出现any类型和不写类型
  • api接口请求参数或者返回的对象、lib方法类库等等不使用interface封装且变量、方法没有任何类型
  • 最基本的方法参数没有类型、返回值没有类型,一切随缘,想起来的就加上类型,想不起来就不加了
  • 项目一开始会有强制要求类型,项目稍微忙一些,算了以满足业务为前提,先不加了,于是后面就几乎都不加类型了

仔细看上面的问题,会发现本来我们选择typescript初衷是为了使用类型来帮助我们,但是在项目的实际使用中,味道越来越变了,于是乎,就有了“代码破窗效应”

破窗理论:一个房子如果窗户破了,没有人去修补,隔不久,其它的窗户也会莫名其妙地被人打破;一面墙,如果出现一些涂鸦没有被清洗掉,很快的,墙上就布满了乱七八糟、不堪入目的东西;一个很干净的地方,人们不好意思丢垃圾,但是一旦地上有垃圾出现之后,人就会毫不犹疑地抛,丝毫不觉羞愧。

typescript类型破窗效应:如果有人在typescript项目中开始不使用类型,那么就会有第二个人,第三个人...第n个人也会不使用类型,那么以上typescript的好处全无。我们实验室了解到的企业中,90%的企业虽然在刚开始搭建项目的时候是typescript项目,但是最终沦为和写js项目一模一样。

这也是当前业内前端typescript项目的一个很滑稽现状,表面上是typescript项目,但是代码里到处是 any或者不写类型, 但是仍然对外界说 “ 嗯,我们在用ts,ts很不错!”

# 三、最终建议

SmartAdmin 2.X 提供了 JS 和 TS 双版本 供大家选择,那么肯定有人问,建议选择哪个呢?
最终我们的建议是:

  • 如果活少人多,且长期维护的话,我们建议选择 ts !
  • 如果活多人多,活多人少,还是选择js吧,把代码写的漂亮一些《Vue3规范 V2.0》,也许并不比typescript差!

# 联系我们

1024创新实验室-主任:卓大 (opens new window),混迹于各个技术圈,研究过计算机,熟悉点 java,略懂点前端。
1024创新实验室(河南·洛阳) (opens new window) 致力于成为中原领先、国内一流的技术团队,以技术创新为驱动,合作各类项目。

加 主任 “卓大” 微信
拉你入群,一起学习
关注 “小镇程序员”
分享代码与生活、技术与赚钱
请 “1024创新实验室” 喝咖啡
支持我们的开源与分享

告白气球 (钢琴版)
JESSE T