家家有本難念的經(jīng),人人都有廢寢忘食力求正確的程序,。 我的程序是用JavaScript編寫(xiě)的單頁(yè)應(yīng)用,,只使用了JQuery和JavaScript,但它是我寫(xiě)過(guò)的最搖搖欲墜的程序了,。 而當(dāng)我切換到TypeScript后,,它幫我消滅了所有已知的bug,還防止了一切類型的錯(cuò)誤再次發(fā)生,。換成TypeScript之后的第一個(gè)好處就是,,所有方法調(diào)用參數(shù)過(guò)多或過(guò)少,,或者方法名拼錯(cuò)的地方,都能夠立即發(fā)現(xiàn)(代碼非常龐大而且沒(méi)有文檔,,編寫(xiě)者也大多沒(méi)有經(jīng)驗(yàn),,也沒(méi)有標(biāo)準(zhǔn)化編程的經(jīng)驗(yàn))。 而讓tsc(TypeScript編譯器)強(qiáng)制編譯一切代碼,,不存在的方法就會(huì)讓編譯終止,。程序中有一些地方會(huì)將數(shù)值類型的變量與數(shù)字進(jìn)行比較。使用==進(jìn)行比較時(shí)沒(méi)問(wèn)題,,因?yàn)镴avaScript會(huì)嘗試將非數(shù)值的數(shù)字轉(zhuǎn)換成真正的數(shù)字,,但使用===比較時(shí)(為了安全性和性能,這樣做是必須的),,你就會(huì)發(fā)現(xiàn)‘1’ === 1會(huì)返回false,,從而導(dǎo)致大量錯(cuò)誤。 而用明確的類型聲明所有的參數(shù)和變量(例如 : number),,就能捕獲所有此類型的錯(cuò)誤,。我們使用ESLint來(lái)清理TypeScript代碼,因?yàn)門SLint會(huì)在2019年某個(gè)時(shí)候被棄用,。 ESLint可以幫助我們捕獲可能會(huì)導(dǎo)致問(wèn)題的地方,,例如返回值沒(méi)有賦給某個(gè)變量,或者其他可能導(dǎo)致不正確的問(wèn)題,。由于我們?cè)跇?gòu)建過(guò)程中加入了ESLint,,因此每次構(gòu)建都會(huì)捕獲lint錯(cuò)誤。 在ESLint之外,,我們還使用了Prettier來(lái)格式化代碼,,最后不花任何代價(jià)就得到了統(tǒng)一的代碼風(fēng)格。由于我們使用編譯器來(lái)捕獲明顯的錯(cuò)誤,,用linting來(lái)捕獲新的錯(cuò)誤,,因此感覺(jué)我們可以放心地將JavaScript函數(shù)移動(dòng)到類中,從而獲得更有組織,、更標(biāo)準(zhǔn)化的TypeScript代碼,,并找出一切可以重用和統(tǒng)一的代碼。由于我們引入了類,,因此必須將狀態(tài)從全局作用域移動(dòng)到各個(gè)類中,。 似乎除了明顯的方法調(diào)用錯(cuò)誤和不同數(shù)據(jù)類型的值的比較之外,糟糕的狀態(tài)管理是第二大Bug的源泉,。 雖然在這個(gè)項(xiàng)目上,,我們沒(méi)有時(shí)間引入像redux等框架,但只要將狀態(tài)移入各個(gè)類中,就足以讓我們找出不恰當(dāng)?shù)夭倏v狀態(tài)的代碼并進(jìn)行改正了,。將一大堆意大利面式的JavaScript代碼改成獨(dú)立的類,,我們就可以針對(duì)每個(gè)類編寫(xiě)Jest測(cè)試用例,從而獲得更大的安全性,,對(duì)應(yīng)用程序進(jìn)行修改時(shí)也更有信心,。 最終我們發(fā)現(xiàn),將老舊的JavaScript遺留應(yīng)用程序移植到TypeScript上,,無(wú)論從開(kāi)發(fā),、質(zhì)量保證還是最終用戶的角度來(lái)看,,都是一項(xiàng)非常漂亮的舉措,,因?yàn)樗氲念~外的嚴(yán)格和安全度量可以幫我們讓?xiě)?yīng)用程序更穩(wěn)定,而且我們修改代碼時(shí)不會(huì)破壞已有代碼,。 當(dāng)然,,我并沒(méi)有將應(yīng)用程序轉(zhuǎn)成Angular,也沒(méi)有添加Redux之類的狀態(tài)管理庫(kù),,但最終,,該項(xiàng)目提前完成,沒(méi)有出現(xiàn)任何故障,,在這個(gè)過(guò)程中還解決了大量已有錯(cuò)誤,,從而證明了與其在JavaScript中逐個(gè)修改bug并膽戰(zhàn)心驚地期待一切正確,還不如將應(yīng)用程序轉(zhuǎn)成TypeScript更節(jié)省時(shí)間,。 每個(gè)項(xiàng)目都不一樣,,但我強(qiáng)烈建議,如果你想重新組織舊應(yīng)用程序,,那么應(yīng)該考慮一下TypeScript,。原文:https:///integerman/how-typescript-squashed-all-known-bugs-98c本文為 CSDN 翻譯,轉(zhuǎn)載請(qǐng)注明來(lái)源出處,。
|