老码农绝密:使用 TS(TypeScript) 的 10 大理由
最近,小編讀了一篇名為《放棄 TypeScript 的 7 個非常好的理由》,這篇文章的閱讀量不低。里面有些觀點(diǎn)確實(shí)有趣,不過在這里我要向你介紹使用 TypeScript 的 10 個理由。
TypeScript 降低代碼出錯的風(fēng)險
開發(fā)人員寫 BUG 是很自然的事情。幾乎有一半的時間,我們都是在查找程序出錯的原因。在 JavaScript 中,原因可能只是簡單如類型錯誤。例如,將數(shù)值賦值給字符串變量,這個操作在 JavaScript 中沒問題,但在 TypeScript 中會編譯失敗。JavaScript 開發(fā)人員已經(jīng)被這種問題困擾很久了,甚至引入嚴(yán)格模式(Strict mode)來減少這種錯誤。
使用 TypeScript,上面的代碼是無法編譯的,不會出現(xiàn)在最終的代碼庫中。而使用 JavaScript 則不然。即便 TypeScript 無法避免運(yùn)行時類型錯誤,但依然可以有效地降低這種風(fēng)險。
快速失敗原則
在代碼可正常運(yùn)行之前,TypeScript 引入了一個新的強(qiáng)制性步驟:將代碼轉(zhuǎn)換為 JavaScript。在編寫新代碼時,這個步驟每天也可能會失敗很多次。而非靜態(tài)類型的語言會將失敗和錯誤檢測延遲到運(yùn)行時。可空類型對于任何現(xiàn)代語言都非常重要,它有助于擴(kuò)展代碼。
Adrian Colyer 在 2017 年寫了一篇非常有趣的文章:量化 JavaScript 中可檢測的錯誤。在文章的結(jié)尾,你可以找到一個有趣的實(shí)驗(yàn)結(jié)果,Eric 調(diào)查了 JavaScript 工程中公開的 400 個 BUG,通過使用 TypeScript 或者 Flow,可以有效捕獲其中的 59 個,而不會出現(xiàn)在生產(chǎn)環(huán)境中。注意,在本文中,我們考慮的只是減少錯誤代碼。
讓代碼有更豐富的信息/文檔
如今,在前端開發(fā)中,編寫可重用代碼和可重用組件已經(jīng)跟玩似的。重新造輪子很容易出錯,而且成本太高。因此,最好使用現(xiàn)有的庫或代碼。TypeScript 在代碼中添加了很多信息,并強(qiáng)制執(zhí)行此用法。輸出的 TypeScript 代碼包含更多相關(guān)的信息,如類型簽名等。而 JavaScript 代碼的說明信息就很少了,閱讀起來比較費(fèi)勁。你要么需要以 JSDoc 的形式提供信息,要么以某種外部文檔的形式提供信息。當(dāng)大量重用代碼時,則會降低開發(fā)效率。
當(dāng)然,閱讀和編寫文檔仍然很重要,但是類型提示讓代碼更具可讀性。對于尚未完全了解您的代碼庫的人來說尤其如此。智能感知功能更適用于 Typescript,因?yàn)槟塬@取到類型簽名信息。
在短期內(nèi),使用 TypeScript 有時確實(shí)意味著需要打更多的字。另外,由于 TypeScript 將轉(zhuǎn)換為 JavaScript 并與 JavaScript 代碼庫混合使用,因此確實(shí)有時需要和它進(jìn)行斗爭,并在某些地方將其關(guān)閉。但是從長遠(yuǎn)來看,TypeScript 可以擴(kuò)展,而 JavaScript 卻很難擴(kuò)展。現(xiàn)在使用 TypeScript 能在將來幫到您的開發(fā)人員。
TypeScript 比 JavaScript 具有更多功能
TypeScript 的功能比 JavaScript 更多。顯然,靜態(tài)類型檢查是最主要的一個,但還有其它的。大多數(shù) TypeScript 的特性(之前 JavaScript 未實(shí)現(xiàn)的)現(xiàn)在在 JavaScript 都已經(jīng)實(shí)現(xiàn)了。但是 TypeScript 仍具有優(yōu)勢,因?yàn)樗难葸M(jìn)速度比 JavaScript 快。如接口、名稱空間、泛型、抽象類、數(shù)據(jù)修改器、可選、函數(shù)重載、裝飾器、utils 類型和 readonly 關(guān)鍵字等。本文并不打算涵蓋所有這些功能,只簡單舉個只讀的 TypeScript util
好的重構(gòu)和工具
重構(gòu) TypeScript 代碼比使用非類型化語言要容易得多。我目睹了許多 JavaScript 開發(fā)人員使用全局搜索和替代來重命名變量,而最終導(dǎo)致單元測試失敗的情況。使用 TypeScript,您可以在代碼中獲得其他語義。使用接口或類時,編譯器知道對象將包含哪些字段。現(xiàn)在,重命名接口、類或枚舉的字段比以往更加容易。只需使用 VSCode 或 IntelliJ 的重構(gòu)功能,即可見證奇跡的出現(xiàn)。
背景強(qiáng)大
一項(xiàng)廣泛使用的技術(shù)有幾乎無限的資源可以來學(xué)習(xí)它。TypeScript 就是這樣,因?yàn)樗鼡碛旋嫶蟮纳鐓^(qū)。
而如果您正在考慮使用 Angular,則別無選擇,只能選擇 TypeScript。 從 Angular 2 開始,Google 完全采用 TypeScript 作為其主要語言。如果你不使用 Angular,而是將 React 與 TypeScript 一起使用,則將極大地降低將來開發(fā) Angular 項(xiàng)目的復(fù)雜性。
解決 JavaScript 中靜態(tài)類型問題的替代方案
長期以來,JavaScript 的一個問題就是沒有靜態(tài)類型。在過去,這個問題困擾著開發(fā)者,但是項(xiàng)目還是要進(jìn)行。而在 JavaScript 的發(fā)展過程中,也一直在嘗試添加靜態(tài)類型。
例如,React 為其組件發(fā)布了 PropTypes,以減少開發(fā)階段的類型錯誤 – 而 TypeScript 完全涵蓋了這一功能。 Facebook 還有其自己的靜態(tài)類型檢查庫(Flow),該庫基本上與 TypeScript 的原理是一樣的。2014 年,Google 也提出了一種基于 JavaScript 的腳本語言,該語言擴(kuò)展了 TypeScript,稱為 AtScript。
TypeScript 的其它優(yōu)勢
TypeScript 由 Microsoft 編寫和維護(hù)。這是科技巨頭花時間認(rèn)真維護(hù)的一個項(xiàng)目,使該語言更具有安全感。
TypeScript 不僅在 MIT 許可下是完全開源的,而且該項(xiàng)目還提供了透明的路線圖和提交特性請求的功能。
TypeScript 編譯器完全使用 TypeScript 編寫,因此一旦您對該語言有信心,您甚至可以為代碼庫做出貢獻(xiàn)并擴(kuò)展其功能!
結(jié)論
TypeScript 提高了代碼的可讀性,無疑能減少錯誤,或者至少可以更快地捕獲這些錯誤 – 即使在編寫或運(yùn)行任何單元測試之前。JavaScript 肯定是朝著正確的方向發(fā)展,但是靜態(tài)類型語言的優(yōu)勢尚未完全實(shí)現(xiàn)。當(dāng)可選的靜態(tài)類型將來成為 JavaScript 的一部分時,使用 TypeScript 無疑是完美的知識儲備。
最后,小編分類整理了許多java進(jìn)階學(xué)習(xí)材料和BAT面試給熱愛IT行業(yè)的你,如果需要資料的請轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進(jìn)階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進(jìn)行學(xué)習(xí)。
總結(jié)
以上是生活随笔為你收集整理的老码农绝密:使用 TS(TypeScript) 的 10 大理由的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十年“老司机”的私家锦囊:10个编程技巧
- 下一篇: 下一站江湖李意在哪?