當前位置:
首頁 > 最新 > 為什麼 Reddit 選擇了 TypeScript?

為什麼 Reddit 選擇了 TypeScript?

簡評:題圖裡這個很騷氣的字體叫 Operator Mono 。

在今年開年的時候,Reddit 的 CEO - Steve 決定要重新設計 reddit(終於要重新設計了)。之後他們開始考慮各種各樣的問題,不過首先要回答的就是「該用什麼語言」?

當然了,最終你選擇的語言最後都會被編譯成 JavaScript,但如果開發過程中選對了語言對開發效率的提升還是很大的。下面就是我們當時的一些選擇:

Bucklescript

ClojureScript

Coffeescript

Elm

Elixirscript

Javascript 2016 and beyond

Javascript + annotations

Nim

PureScript

Reason

TypeScript

每種語言都有自己的優、缺點,因此我們先明確了自己的幾點需求:

要支持強類型

要有很好的配套工具

已經有了成功案例

我們的工程師可以很快上手

能同時工作於客戶端和伺服器

有優秀的類庫

在考慮了這些需求之後,我們的最佳選擇似乎只有 Typescript 或者 JavaScript + Flow 了。在我們進行選擇之前,先了解下它們的區別在哪裡。

Compilation vs Annotation

Typescript 和 Flow 的一個主要區別在於,Typescript 是 JavaScript 的強類型版本,而 Flow 是通過一組可以添加到 JavaScript 的註解,然後通過工具檢查正確性。 比如對於 enum 的寫法:

Typescript

enum VoteDirection { upvoted = 1, notvoted = 0, downvoted = -1, }; const voteState: VoteDirection = VoteDirection.upvoted;

Flow

const voteDirections = { upvoted: 1, notvoted: 0, downvoted: -1, }; type VoteDirection = $Keys; const voteState: VoteDirection = voteDirections.upvoted;

在 Reddit 中我們用 Babel 來做轉碼,其中有一些我們想要保留的優化,而 TypeScript 自有的編譯過程可能會給我們造成麻煩。所以,我們需要調整我們的構建步驟來集成 TypeScript,從而保證不會破壞已有的很多東西。

相比起來,Flow 的類型註解能自動的被 Babel 移除,如果我們採用 Flow,那我們的構建步驟能保持盡量簡單。

正確性

普遍認為 Flow 在類型正確性上要做得更好。Flow 默認不允許 nullable 類型,而 TypeScript 在 2.x 才開始支持。並且 Flow 能更好的推斷出類型,而 TypeScript 往往會回退到 any 類型。

這裡給一個關於數組的例子:

class Animal {} class Bird extends Animal {} const foo: Array = []; foo.push(new Animal()); /* foo.push(new A); ^ A. This type is incompatible with const foo: Array

= []; ^ B */

class Animal {} class Bird extends Animal {} const foo: Array = []; foo.push(new Animal()); // ok in typescript

這樣的例子網上還有很多,但普遍的共識是,與 TypeScript 相比,Flow 在類型檢查中做得更好。

生態系統

到現在為止,Flow 能讓我們有更簡單的構建過程,更好的類型檢查,那為什麼最後還是選了 TypeScript 呢?

TypeScript 的一大加分項就是其生態系統,TypeScript 的支持庫實在是太棒了。我們用到的所有庫都被收錄於DefinitelyTyped,都有著很好的質量。

並且還支持目前流行的編輯器,比如 VSCode, Atom 和 Sublime Text。此外,TypeScript 還支持解析 JSDoc,這真的特別有用。

目前也已經有了不少使用 TypeScript 的成熟項目,包括 VSCode,Rxjs 和 Angula。所以,我們相信它的功能能夠滿足我們的產品需要。另外,我們對 Flow 的一個憂慮在於 Flow 是為了解決 Facebook 的具體需求而建立的,所以它的未來發展會更多的受制於 Facebook 的業務需求。

總結

我們選擇 Typescript,因為我們有信心我們的工程師可以快速上手(去年裡我們的工程師數量增加了一倍)。但更重要的它是強類型的,這樣我們的代碼有更少的類型相關 bug,更容易構建大型應用,還有著豐富的生態系統。總之,我們很滿意我們的選擇。

原文:Why We Chose Typescript

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 推酷 的精彩文章:

為什麼我選擇使用原型工具來代替紙原型
安全隱患,你對X-XSS-Protection頭部欄位理解可能有誤
「Scaling Lean」作者Ash Maurya訪談
組織為什麼沒能採用CI和CD
APP UI界面中的版式設計理論

TAG:推酷 |

您可能感興趣

Ben Thompson:Facebook 改變 News Feed 的動機是什麼?
為什麼Facebook的Head of AI如此憎恨機器人Sophia?
jQuery UI 為什麼使用部件庫(Widget Factory)
這雙刷屏的Nike Epic React Flyknit究竟有什麼特別之處?
抖音檸萱wxx創作的原聲是什麼:短髮The Girl With Short Hair
TensorFlow可以做什麼?讓Google Brain首席工程師告訴你
蜘蛛Rescue Assist&Atlantic Salt橫向測評:同時擁有是一種什麼樣的體驗?
吳亦凡freestyle,張藝興balance,黃子韜go died,那鹿晗是什麼
Balenciaga和Vetements 勁敵出現?大師山本耀司 Y-3 秀場教你什麼才是極簡復古風
Balenciaga 和 Vetements 勁敵出現?大師山本耀司 Y-3 秀場教你什麼才是極簡復古風~
時髦辦 | Céline「落在」Saint Laurent前任設計師手裡會發生什麼?
抖音裡面甩手的歌名叫什麼 唱的是Movin like Berney
為什麼我會被Kubernetes「洗腦」?
John Singer Sargent 他告訴我們什麼是現實主義
為什麼編程啟蒙要學 Scratch,不是Python?
霉霉Taylor swift的歷任男友分手的原因都是什麼?
iPhoneX今秋停產:蘋果 iPhoneX為什麼會停產,iPhoneX停產原因
iPhoneX或停產是真的嗎?iPhoneX為什麼要停產?
python是什麼語言?現在學Python好找工作嗎?
棒棒糖為什麼叫Lollypop?