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