TypeScript 干掉所有已知 Bug?!

2019年10月3日 240点热度 0人点赞 0条评论

图片

图片


作者 | Matt Eland
译者 | 弯月,责编 | 胡巍巍
出品 | CSDN(ID:CSDNnews) 
家家有本难念的经,人人都有废寝忘食力求正确的程序。 
我的程序是用JavaScript编写的单页应用,只使用了JQuery和JavaScript,但它是我写过的最摇摇欲坠的程序了。 
而当我切换到TypeScript后,它帮我消灭了所有已知的bug,还防止了一切类型的错误再次发生。

图片

找出已有的“链接”问题


换成TypeScript之后的第一个好处就是,所有方法调用参数过多或过少,或者方法名拼错的地方,都能够立即发现(代码非常庞大而且没有文档,编写者也大多没有经验,也没有标准化编程的经验)。 
而让tsc(TypeScript编译器)强制编译一切代码,不存在的方法就会让编译终止。

图片

字符串类型的变量


程序中有一些地方会将数值类型的变量与数字进行比较。使用==进行比较时没问题,因为JavaScript会尝试将非数值的数字转换成真正的数字,但使用===比较时(为了安全性和性能,这样做是必须的),你就会发现‘1’ === 1会返回false,从而导致大量错误。 
而用明确的类型声明所有的参数和变量(例如 : number),就能捕获所有此类型的错误。

图片

利用ESLint捕获愚蠢的错误


我们使用ESLint来清理TypeScript代码,因为TSLint会在2019年某个时候被弃用。 
ESLint可以帮助我们捕获可能会导致问题的地方,例如返回值没有赋给某个变量,或者其他可能导致不正确的问题。由于我们在构建过程中加入了ESLint,因此每次构建都会捕获lint错误。 
在ESLint之外,我们还使用了Prettier来格式化代码,最后不花任何代价就得到了统一的代码风格。

图片
引入类

由于我们使用编译器来捕获明显的错误,用linting来捕获新的错误,因此感觉我们可以放心地将JavaScript函数移动到类中,从而获得更有组织、更标准化的TypeScript代码,并找出一切可以重用和统一的代码。

图片

消灭全局状态


由于我们引入了类,因此必须将状态从全局作用域移动到各个类中。 
似乎除了明显的方法调用错误和不同数据类型的值的比较之外,糟糕的状态管理是第二大Bug的源泉。 
虽然在这个项目上,我们没有时间引入像redux等框架,但只要将状态移入各个类中,就足以让我们找出不恰当地操纵状态的代码并进行改正了。


图片

可测试性
 

将一大堆意大利面式的JavaScript代码改成独立的类,我们就可以针对每个类编写Jest测试用例,从而获得更大的安全性,对应用程序进行修改时也更有信心。 
最终我们发现,将老旧的JavaScript遗留应用程序移植到TypeScript上,无论从开发、质量保证还是最终用户的角度来看,都是一项非常漂亮的举措,因为它引入的额外的严格和安全度量可以帮我们让应用程序更稳定,而且我们修改代码时不会破坏已有代码。 
当然,我并没有将应用程序转成Angular,也没有添加Redux之类的状态管理库,但最终,该项目提前完成,没有出现任何故障,在这个过程中还解决了大量已有错误,从而证明了与其在JavaScript中逐个修改bug并胆战心惊地期待一切正确,还不如将应用程序转成TypeScript更节省时间。 
每个项目都不一样,但我强烈建议,如果你想重新组织旧应用程序,那么应该考虑一下TypeScript。
原文:https://dev.to/integerman/how-typescript-squashed-all-known-bugs-98c
本文为 CSDN 翻译,转载请注明来源出处。
【END】

CSDN 博客诚邀入驻啦!

本着共享、协作、开源、技术之路我们共同进步的准则,

只要你技术够干货,内容够扎实,分享够积极,

欢迎加入 CSDN 大家庭!

扫描下方二维码,即刻加入吧!

图片

 热 文 推 荐 

☞谷歌、IBM 们的“量子争霸”迷局
Python 分析热门旅游景点,告诉你哪些地方好玩、便宜、人又少!
绝对不止你一人觉得软件贵得离谱!
云栖大会|当数据中台遇上智能 看中台“鼻祖”阿里巴巴又有什么新花样?
年薪 170 万阿里 P8 程序员征婚上热搜,程序员婚恋观大曝光!
对比C++和Python,谈谈指针与引用
肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019
以太坊交易量第一合约FAIRWIN被爆漏洞, 竟是因为这个接口被滥用……
图片点击阅读原文,即刻阅读《程序员大本营》最新期刊。
图片
你点的每个“在看”,我都认真当成了喜欢
44980TypeScript 干掉所有已知 Bug?!

这个人很懒,什么都没留下

文章评论