做者 | Saurabh Barot
譯者 | 王強
編輯 | Yonie
2018 年發起的 Stack Overflow 開發人員調查(https://insights.stackoverflow.com/survey/2018/) 揭示了業內關於不一樣編程語言、平臺、庫等的一些流行觀點。基於這項研究能夠看出,TypeScript 是比 JavaScript 更受喜好的編程語言。開發者喜歡使用 TypeScript 的因素之一是它能夠向 JavaScript 添加類型。
這樣你就能在運行代碼以前發現錯誤了。此外 TypeScript 編譯器還能爲你提供建議,幫助你更好地解決這些錯誤。
開發者將類型添加到 JavaScript 後還可使用代碼編輯器中的一些高級功能,如自動模塊導入、代碼自動補完和重構整個項目等。
TypeScript 只是一個基於 JavaScript 的層。TypeScript 的學習曲線很陡峭,使用它以前應該先好好學習它的語法,這樣上手起來更快。
開發者能夠輕鬆地將 JavaScript 文件轉換爲 TypeScript,只需將文件擴展名從.js 更改成.ts 便可。以後全部 TypeScript 代碼都將編譯爲 JavaScript。前端
實際上 TypeScript 是一種編程語言。它也被稱爲 JavaScript 的超集。你能夠在 TypeScript 中找到 JavaScript 中的全部功能。它能夠用做大型 JavaScript 應用程序的編程語言。
好消息是最新版本的 ECMAScript 就能支持 TypeScript 了。編譯 TypeScript 時還能同時輸出一個 JavaScript 版本,在全部平臺上都能正常運行。node
若是咱們看一下 TypeScript 從 2016 年到 2018 年 的發展歷程,你會發現用過 TypeScript 並願意再次使用的用戶比例從 20.8%增長到了 46.7%。開發人員選擇它的主要緣由之一是它能減小錯誤。typescript
TypeScript 面世已經有幾年時間了,相繼發佈了不少新版本,有了許多改進。這些改進體如今功能、函數、性能等許多方面。使用 TypeScript 取代 JavaScript 的現象也愈來愈多。要深刻了解這一情況,你須要對這些技術有客觀的認識。
那麼讓咱們比較一下......
JavaScript編程
未知頂級類型
「unknown類型」在 TypeScript 3.0 中引入,做爲與「any」類型對應的新「類型安全」。區分「未知」和「任何」兩個概念的關鍵在於,「未知」比「任何」(「任何」自 2012 年以來就一直是 TypeScript 的組成部分)寬鬆不少。它與「任何」很是類似,由於你能夠爲「未知」分配任何值;但這裏類型斷言是很重要的,沒有它什麼都作不了。此外,你不能訪問或調用 / 構造任何「未知」類型的屬性。
數組和元組上的映射類型
涉及到元組上的映射時,TypeScript 沒有引入全新概念,而是在 TypeScript 3.1 中加入了有映射的對象類型。這與同數組和元組交互時應該採用的方式徹底一致。這意味着無論你在用什麼方式使用已存在的映射類型(如必需或部分),這些方法也能直接拿來處理數組和元組。這樣,TypeScript 能夠很好地適用於像 Promise.all 這樣的函數。
Node.js 包與 tsconfig.json 的繼承
使用 TypeScript 3.2 時你能夠從 node_modules 解析 tsconfig.json。當你嘗試訪問 tsconfig.json 中的「extends」字段時,TypeScript 將查看 thenode_modules 包。它將在 node_modules 文件夾中查找 @my-team/tsconfig-base 的包。在進一步使用該包以前,TypeScript 會查找 package.json 中是否存在 tsconfig 字段,而且一旦找到它就會從字段中加載配置文件。若是找不到這樣的字段,那麼它將轉向 tsconfig.json。在處理大型項目時,這一步驟被證實是頗有用的。
Const 斷言
TypeScript 3.4 引入了一個新的字面值構造,它被稱爲 const 斷言。它的語法是一個類型斷言,用 const 斷言構造新的文字表達式時,你能夠表示對象字面量帶有隻讀屬性,或者數組具備只讀元組。
對 globalThis 進行類型檢查
在全局範圍內訪問值一直是 TypeScript 的一個問題,這個問題在 TypeScript 3.4 中獲得瞭解決,由於新版爲 ECMAScript 中的 globalThis 提供了類型檢查支持。globalThis 只是一個適用於全局範圍的全局變量。此變量可以讓你從喜歡的任何環境中輕鬆訪問全局範圍。一樣,你須要知道 globalThis 不顯示兩個全局變量,即 const 和 let。
在 JSX 中支持 defaultProps
TypeScript 3.0 爲 JSX 中的 React 開發提供了一種新類型,稱爲 LibraryManagedAttributes。此類型用做幫助程序,用於在 prop 類型組件使用以前定義它的更改。這樣就能夠對推斷和提供的映射與 prop 進行修改。
須要注意的是若是添加了顯式類型註釋,編譯器將沒法識別默認屬性,由於默認屬性是從 defaultProps 的屬性類型推斷出來的。json
它是一種面向對象的語言
這種面向對象的語言具備接口、類、繼承、模塊等功能。
可選靜態類型
TypeScript 附帶可選的靜態類型系統,是它的一大優點。你能夠向屬性、函數、變量等添加類型。所以在應用程序運行以前,編譯器就能顯示有關任何潛在問題(若是存在)的任何警告。類型能讓開發人員知道本身須要哪一種類型 API,在使用框架和庫時這一點頗有用。
須要記住的是使用類型是可選的。就是說開發人員不會被 TypeScript 強迫使用他們不想要的任何類型。但要記住,當應用程序規模變大,且隨時間變得越發複雜時,類型也會愈來愈體現其價值。
提供對 JavaScript 庫的支持
你能夠將 TypeScript 與現有的頂級 JavaScript 框架和庫以及其餘工具一塊兒使用。
TypeScript 是可移植的
你能夠在任何設備、瀏覽器或操做系統上運行 TypeScript。它能夠在各類設備上輕鬆使用,全平臺兼容。你能夠在支持 JavaScript 的任何環境中運行 TypeScript。
更少的錯誤
在前端開發領域,若是開發者能更方便地發現編程過程當中發生的錯誤就能節約不少時間。這也就是爲何你須要 TypeScript。使用 TypeScript 時,你能夠確保代碼庫中沒有無效代碼。
智能感知
在你的項目中使用 TypeScript 的另外一個好處是智能感知,由於它能幫助代碼自動補完。寫代碼時智能感知能提供有用的提示。當今市面上全部重要的 IDE 都支持代碼自動補完功能,包括 Sublime Text、Atom、WebStorm、VScode,還包括一些命令行編輯器。
TypeScript 很像 JS
TypeScript 代碼徹底在 JavaScript 中運行。這意味着你只須要對 JavaScript 有所瞭解便可開始使用 TypeScript。在代碼執行方面,用 TypeScript 編寫的代碼被編譯並轉換爲 JavaScript。數組
開發者在已經意識到 TypeScript 能夠大幅提升生產力,並輕鬆構建可靠且可擴展的應用程序。將它集成到現有的 JavaScript 是很是容易的,而且它能夠輕鬆地與 React、Angular、Node 和 Vue 一塊兒使用。
你還要知道 JavaScript 和 TypeScript 都在不斷髮展,它們毫不會相互競爭。它們只是相互補充,各自知足不一樣的需求。所以,你能夠根據你的項目需求選擇正確的解決方案。
英文原文: https://aglowiditsolutions.com/blog/why-use-typescript/瀏覽器