作者 | 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 大家庭!
领取专属 10元无门槛券
私享最新 技术干货