TypeScript培養類型思惟 前言:當你點開這篇文章時,我相信你已經在不少地方都已經據說過或者見過TypeScript了。 可是可能對TypeScript依然有不少問號:TypeScript究竟是什麼?爲何每一個人都在說TypeScript怎麼怎麼好,到底好在哪裏?Angular、Vue3接連使用TypeScript進行了重構是否意味着咱們必須掌握TypeScript,它們又爲何要選擇TypeScript?我須要什麼樣的基礎才能學會或者說學好TypeScript呢? 沒有關係,在這個章節中咱們就來解答上面的疑惑,而且我但願你們學完這個章節能夠對一個概念有深刻的理解,就是類型思惟。 不着急,下面就讓咱們和TypeScript有一場美麗的邂逅~前端
一. JavaScript的痛點 我始終堅信:任何新技術的出現都是爲了解決以前某個技術的痛點。vue
1.1. 優秀的JavaScript JavaScript是一門優秀的編程語言嗎? 每一個人可能觀點並不徹底一致,可是從不少角度來看,JavaScript是一門很是優秀的編程語言。 並且,能夠說在很長一段時間內這個語言不會被代替,而且會在更多的領域被你們普遍使用。 著名的Atwood定律: Stack Overflow的創立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律。 any application that can be written in JavaScript, will eventually be written in JavaScript. 任何可使用JavaScript來實現的應用都最終都會使用JavaScript實現。 其實咱們已經看到了,至少目前JavaScript在瀏覽器端依然無可替代,而且在服務端(Nodejs)也在備普遍的應用。 優秀的JavaScript沒有缺點嗎? 其實上因爲各類歷史因素,JavaScript語言自己存在不少的缺點; 好比ES5以及以前的使用的var關鍵字關於做用域的問題; 好比最初JavaScript設計的數組類型並非連續的內存空間; 好比直到今天JavaScript也沒有加入類型檢測這一機制; JavaScript正在慢慢變好 不能否認的是,JavaScript正在慢慢變得愈來愈好,不管是從底層設計仍是應用層面。 ES六、七、8等的推出,每次都會讓這門語言更加現代、更加安全、更加方便。 可是知道今天,JavaScript在類型檢測上依然是毫無進展(爲何類型檢測如此重要,我後面會聊到)。 1.2. 類型引起的問題 首先你須要知道,編程開發中咱們有一個共識:錯誤出現的越早越好 能在寫代碼的時候發現錯誤,就不要在代碼編譯時再發現(IDE的優點就是在代碼編寫過程當中幫助咱們發現錯誤)。 能在代碼編譯期間發現錯誤,就不要在代碼運行期間再發現(類型檢測就能夠很好的幫助咱們作到這一點)。 能在開發階段發現錯誤,就不要在測試期間發現錯誤,能在測試期間發現錯誤,就不要在上線後發現錯誤。 如今咱們想探究的就是如何在 代碼編譯期間 發現代碼的錯誤: JavaScript能夠作到嗎?不能夠,咱們來看下面這段常常可能出現的代碼問題。webpack
function getLength(str) { return str.length; }程序員
console.log("1.正在的代碼執行"); console.log("2.開始函數"); getLength("abc"); // 正確的調用 getLength(); // 錯誤的調用(IDE並不會報錯)web
// 當上面的代碼報錯後, 後續全部的代碼都沒法繼續正常執行了 console.log("3.調用結束"); 算法
在瀏覽器下的運行結果以下: 編程
GitHub說法:TypeScript is a superset of JavaScript that compiles to clean JavaScript output. TypeScript官網:TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. 翻譯一下:TypeScript是擁有類型的JavaScript超集,它能夠編譯成普通、乾淨、完整的JavaScript代碼。小程序
怎麼理解上面的話呢? 咱們能夠將TypeScript理解成增強版的JavaScript。 JavaScript所擁有的特性,TypeScript所有都是支持的,而且它緊隨ECMAScript的標準,因此ES六、ES七、ES8等新語法標準,它都是支持的; 而且在語言層面上,不只僅增長了類型約束,並且包括一些語法的擴展,好比枚舉類型(Enum)、元組類型(Tuple)等; TypeScript在實現新特性的同時,老是保持和ES標準的同步甚至是領先; 而且TypeScript最終會被編譯成JavaScript代碼,因此你並不須要擔憂它的兼容性問題,在編譯時也不須要藉助於Babel這樣的工具; 因此,咱們能夠把TypeScript理解成一身神裝的JavaScript,不只讓JavaScript更加安全,並且給它帶來了諸多好用的裝備特效; 2.2. TypeScript的特色 官方對TypeScript有幾段特色的描述,我以爲很是到位(雖然有些官方,瞭解一下),咱們一塊兒來分享一下: 始於JavaScript,歸於JavaScript TypeScript從今天數以百萬計的JavaScript開發者所熟悉的語法和語義開始。使用現有的JavaScript代碼,包括流行的JavaScript庫,並從JavaScript代碼中調用TypeScript代碼。 TypeScript能夠編譯出純淨、 簡潔的JavaScript代碼,而且能夠運行在任何瀏覽器上、Node.js環境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中。 TypeScript是一個強大的工具,用於構建大型項目 類型容許JavaScript開發者在開發JavaScript應用程序時使用高效的開發工具和經常使用操做好比靜態檢查和代碼重構。 類型是可選的,類型推斷讓一些類型的註釋使你的代碼的靜態驗證有很大的不一樣。類型讓你定義軟件組件之間的接口和洞察現有JavaScript庫的行爲。 擁有先進的 JavaScript TypeScript提供最新的和不斷髮展的JavaScript特性,包括那些來自2015年的ECMAScript和將來的提案中的特性,好比異步功能和Decorators,以幫助創建健壯的組件。 這些特性爲高可信應用程序開發時是可用的,可是會被編譯成簡潔的ECMAScript3(或更新版本)的JavaScript。 正是由於有這些特性,TypeScript目前已經在不少地方被應用: 包括咱們前面提到的Vue3和Angular已經使用TypeScript進行重構; 數組
angular源碼瀏覽器
包括Vue3之後的開發模式必然會和TypeScript更加切合,你們也更多的須要使用TypeScript來編寫代碼; 包括目前已經變成最流行的編輯器VSCode也是使用TypeScript來完成的
包括在React中已經使用的ant-design的UI庫,也大量使用TypeScript來編寫:
ant-design源碼 包括小程序開發,也是支持TypeScript的
小程序開發 2.3. 體驗TypeScript 原本想在這個位置放上一個體驗TypeScript的程序,可是涉及到過多TypeScript的安裝流程和vscode的配置信息。 因此,我打算在下一篇中專門講解這部分的內容,包括使用webpack搭建一個能夠自動測試TypeScript代碼的環境。 So,稍安勿躁,這一個章節咱們就和TypeScript有一個簡單的邂逅就好,後面再進行深刻了解。 三. 前端學不動系列 3.1. 前端開發者的難 在以前的Flutter文章中,我說到一個話題,大前端是一羣最能或者說最須要折騰的開發者: 客戶端開發者:從Android到iOS,或者從iOS到Android,到RN,甚至如今愈來愈多的客戶端開發者接觸前端相關知識(Vue、React、Angular、小程序); 前端開發者:從jQuery到AngularJS,到三大框架並行:Vue、React、Angular,還有小程序,甚至如今也要接觸客戶端開發(好比RN、Flutter); 目前又面臨着不只僅學習ES的特性,還要學習TypeScript; Vue3立刻也會到來,又必須學習Vue3新特性; 大前端開發就是,不像服務器同樣可能幾年甚至幾十年仍是那一套的東西。前端新技術會層出不窮。
看完文章,相信對於上面的問題,你內心應該已經有了答案,以後也會更新其餘技術文章,如:TypeScript、React、Node、數據結構與算法等等,也會更新一些本身的學習心得等,歡迎你們添加微信:19950277730,獲取更多幹貨分享及學習資源。