首页
学习
活动
专区
工具
TVP
发布

TypeScript 干掉所有已知 Bug!

作者 | 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 大家庭!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191004A036WP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券