拋棄 JS,使用 TypeScript

最近幾個月我已經全面拋棄 JavaScript,徹底使用 TypeScript 進行前端開發(只在上課的時候用到 JS)。前端

先說優勢:面試

  1. bug 顯著減小,以前會遇到的 xxx 爲空的問題幾乎不會出現了,類型相關 bug 直線減小。
  2. 應用更可控,當你須要約束某些代碼的時候,用類型就能很簡單地作到,好比 React 裏強制寫 diaplayName 方便調試。
  3. 查文檔更方便,之前要打開瀏覽器看文檔,如今直接查看定義就基本明白了。

再說缺點:typescript

沒有。哈哈。瀏覽器

如今只會 JS 的前端要怎麼辦?

不用慌,TS 的代碼跟 JS 差很少,你學完 JS 後,只須要學習一下類型聲明就能夠掌握 TS 了。框架

若是你公司的項目目前只支持 JS,也沒有關係,只須要加一個 ts-loader 或者 awesome-typescript-loader 就能提供 TypeScript 支持,TS 能夠和 JS 共存哦。模塊化

而後你就能夠逐步用 TS 代替 JS,實現完美過渡。單元測試

爲何 TypeScript 是好的?

若是你如今尚未開始學習 TS,確定是由於對 TS 有所顧慮。去問問用了 TS 的前端感受怎麼樣吧,基本沒有一個說後悔的。因此這種顧慮是徹底沒有必要的。學習

那麼 TS 爲何這麼好呢?接下來咱們從理論上解釋一下。測試

  1. 寫代碼最怕什麼?代碼出錯,也就是 bug。
  2. 如何避免 bug?運行代碼看結果,或者添加各類測試。
  3. 如今前端並不流行單元測試,因此只能運行代碼看結果(好比刷新頁面,而後用鼠標點點點,看是否能運行成功)
  4. 但當你的前端應用很是大的時候,你不可能每次改代碼以後去全部頁面上點一遍,由於頁面太多了。
  5. 因此前端選擇模塊化,讓一次代碼改動影響的頁面儘可能少。可是即便這樣,你依然沒法經過鼠標點擊測試來運行全部代碼,由於你可能還須要測試多種不一樣的帳戶。
  6. 這樣作太麻煩了。有沒有什麼辦法能讓我快速知道「代碼有bug沒」

這是一個重要的問題:有沒有什麼辦法能讓我快速知道「代碼有bug沒」。lua

爲了說明類型是如何解決這個問題的,咱們先來介紹一種最簡單的類型:正負數。

咱們把實數分爲三種類型:正數、負數和0。

而後看下面這個等式:

28937829 * -1239282 = 35862130598778
複製代碼

聰明的你一眼就看出這個等式不對。爲何?由於「正數」乘以「負數」必然獲得「負數」。因此咱們根本不用運行這個乘法,就知道這個結果不對。

這就是類型好處。

類型能讓你「大概」知道代碼對不對

TS 就是在 JS 上加上類型聲明,這樣咱們就能知道代碼是否「大概」正確。

另外,這種方式速度很是快,快到你只要修改代碼,TS 就能告訴你代碼是否「大概」正確。

從而避免不少 bug。

你只須要稍微花一點點時間,就能讓代碼質量提高,何樂不爲呢?

據說 TS 只適合大型項目?

錯,只要是有 bug 的 JS 項目,均可以用 TS 替代 JS 從而減小 bug。

因此不管是小項目仍是大項目,都有必要使用 TS。

萬一過幾年 TS 不火了呢?

這個問題問得好,前端發展這麼快,不少東西都是火幾年就不火了,致使後期想招人維護都難(好比 AngularJS 1)。

可是 TS 不存在這個問題。爲何?

由於目前前端三大框架全都支持 TS 了:

  1. Angular 很早就支持 TypeScript 了,並且還把 JS 從本身的名字裏去掉了:AngluarJS -> Angular。甚至連 Angular 入門文檔裏的例子都默認是 TS 版本的。用 JS 寫 Angular 不是不能夠,只是會顯得很「奇怪」,明明有更好的 TS,爲何會有人用 JS。
  2. Vue 3.0 用 TS 重寫了,爲了更好的支持 TS,甚至放棄了本來計劃推出的 class API。
  3. React 一開始對 TS 的支持也是很是絲滑。不過 React 並無強綁定到 TS。

若是有一年 TS 不火了,上面框架的維護者會提早爲你想好升級方案的,你就沒必要過多擔憂了。

畢竟背靠大樹好乘涼。

JS 豈不是白學了?

No No No,TS 裏面包含了 JS 的全部語法,因此你在用 TS 的時候,實際上仍是在用 JS。

也就是說 JS 的魂還在,咱們只是再也不單獨使用 JS 了。

結論

快點學 TypeScript 吧,它很快就是一線互聯網公司面試加分項甚至必備項了。

反駁

若是你有什麼須要反駁的,歡迎反駁,可是請給出充足的理由,無心義的站隊和灌水評論會被我刪掉,這樣咱們的討論纔會更有意義。

沒有看完文章就評論的,也會被刪除。

相關文章
相關標籤/搜索