Vue 2.5釋出在即 將全面支援TypeScript

icesman發表於2019-03-01

寫在前面

原文連結 Upcoming TypeScript Changes in Vue 2.5
如無特殊宣告,文中的TS均指TypeScript
由於是本人第一次翻譯,且無TypeScript使用經驗,如果有錯誤之處,請閣下不吝賜教。

編碼優化型別優化(此處原文為Typing Improvement 結合上下文 應該是“編碼優化”)

從Vue 2.0釋出以來,就一直有呼聲說要將TypeScript更好地和Vue整合到一起,主要的庫(Vue, Vue-Router, Vuex)也有了TS的型別宣告。然而,目前的Vue和TS的結合,當你使用某些新的(out-of-the-box實在不知道怎麼翻)Vue API還有點欠缺。例如,使用TS時就無法很好地推斷Vue中this指向;而為了更好地使用TS的語法編寫Vue元件,必須使用額外的vue-class-component做裝飾器。

對於喜歡OOP程式設計的人來講,這可能已經足夠使用了;但他們為了使用TS的型別推斷,就必須使用不同的API。這對從現有的ES編寫的Vue程式遷移到TS時會有不少的問題。

今年早些時候,TS就釋出了一些新的特性,這些特性解決了TS對於物件中this指向的問題,解決了Vue中的型別宣告問題。來自TS團隊的Daniel Rosenwasser提出了一個巨集大的目標,現在由Vue團隊中的[HerringtonDarkholme](github.com/HerringtonD…

  • 在使用TS時,原生Vue API中正確的this型別推斷,在單檔案元件中也適用;
  • 元件props中正確的this型別推斷
  • 更重要的是,這些優化對於使用原生JS的開發者也會有幫助。如果你正在使用VSCode做開發並且安裝了外掛Vetur,程式碼自動提示將會有巨大的提升;在使用原生JS編寫Vue元件時,型別提示也會有不少的優化。這都要歸功於vue-language-server,一個負責Vue元件語法分析的包,得益於TS編譯器,能更好地分析編寫的程式碼。不僅僅VSCode能使用這個包,任何支援語言伺服器介面(language server protocol)的IDE都能使用vue-language-server

(因圖片過大,掘金無法上傳,無法轉存,只好放連結了,編輯器語法提示圖片

如果你迫不及待地想試試新特性,可以checkoutveturpack上的new-types分支,使用VSCode + Vetur執行。

TS開發者遷移需要做的事情

關於TS型別升級優化的特性將會出現在Vue 2.5,目前的計劃是在10月初左右釋出。因為大部分的API都沒有發生變化,所以只更新了一個小的版本號。但是,對於現有的使用TS + Vue開發的專案,遷移到2.5版本的Vue上時,有一些程式碼需要改變,為了給開發者有足夠的時間去計劃遷移,我們提早宣佈了這些新特性。

  • 新特性的TS版本最低要求為2.4;使用Vue2.5時,建議使用最新版的TS;
  • 早些版本,我們建議在tsconfig.json配置檔案中新增“allowSyntheticDefaultImports”: true,並使用ES風格的import語法,在所有地方都使用import Vue from ‘vue’;但在新版本中,配置中的“allowSyntheticDefaultImports”: true將不再需要,官方預設使用ES的import/export,在所有情況下,開發者都必須使用ES的imports
  • 因為語法的變更,以下這些依賴Vue 2.5的庫都會有版本的更新: vuex, vue-router, vuex-router-sync, vue-class-component
  • 當你增加自定義模組的時候,應該使用interface VueConstructor而不是nameSpace Vue例子
  • 如果你將元件選項註解為ComponentOptions<Something>,computed,watch,render以及生命週期鉤子函式需要你手動加上型別註解

我們盡力將遷移成本降到最低,TS整合的優化儘可能做到與vue-class-component相容。對於大部分開發者,簡單地更新一下依賴包並轉換成ES風格的import就能完成升級。與此同時,我們建議講版本停留在2.4.x直至你真的做好準備升級了。

On the Roadmap: vue-cli支援TypeScript

在Vue 2.5釋出後,我們計劃在下個版本的vue-cli中加入對TS的支援,方便開發者。

對於非TypeScript使用者

新版本的Vue對於使用ES的開發者沒有任何的負面影響,2.5版本是完全的向後相容。如上文提到的,如果你使用vue-language-server,你將會有更好的語法提示功能。

相關文章