Vue 2.5中將迎來有關TypeScript的改進!

類型改進

自Vue2.0發佈以來,咱們一直在收到更好集成TypeScript的請求。從那時起,咱們已經爲大多數核心庫(vuevue-routervuex)加入了官方的TypeScript類型聲明。然而,當使用開箱即用的Vue API時,目前的集成仍是有所欠缺。例如:TypeScript不能輕易的推斷出Vue使用的基於對象的默認API中的this類型。想要使咱們的Vue代碼與TypeScript更好的運做,咱們須要使用vue-class-component裝飾器,它容許咱們使用基於類的語法來寫Vue組件。vue

對於喜歡基於類的API的用戶,這可能就夠好了,可是有點糟的是,只是爲了類型判斷,用戶就不得不使用不一樣的API。這也使得將現有的Vue代碼庫向TypeScript遷移更具挑戰。git

今年的早些時候,TypeScript引入了一些新特性,能使TypeScript更好的理解基於對象字面量的API,這也使得改進Vue的類型聲明更具可能。來自TypeScript團隊的Daniel Rosenwasser發起了一個雄心勃勃的PR(如今由核心團隊成員HerringtonDarkholme持有),一旦經過合併,將會提供:github

  • 使用默認的Vue API時對this的正確的類型推斷。這也能在單文件組件中很好的運行!
  • 基於組件的props配置的thisprops的類型推斷。
  • 更重要的是,這些改進也會使純粹的JavaScript用戶受益!,若是你正在配合很棒的Vetur擴展使用VSCode,在Vue組件中使用純粹的JavaScript時,你會感覺到關於自動補全提示甚至是類型提示的顯著改進! 這是由於vue-language-server,這個分析Vue組件的內部包,能夠利用TypeScript編譯器來提取關於你代碼的更多信息。此外,任何支持語言服務協議的的編輯器均可以利用vue-language-server來提供相似的功能。


運行中的 VSCode + Vetur + 新類型聲明vue-router

感興趣的話,就克隆這個體驗項目(確保是new-types分支)並使用VSCode + Vetur打開它來嘗試一下吧。vuex

TypeScript用戶可能須要的操做

類型改進將在vue 2.5中實裝,目前計劃在十月初先後發佈。咱們正在發佈一個小版本,由於JavaScript公共API尚未取得突破性改變,可是,升級可能須要現有的Vue+TypeScript用戶進行一些操做。這也是咱們如今公佈改動的緣由,便於你有足夠的時間來規劃升級。vue-cli

  • 新的類型須要至少2.4版的TypeScript。建議你隨着Vue2.5升級至最新的TypeScript版本。
  • 以前,咱們建議在tsconfig.json中配置"allowSyntheticDefaultImports": true來使用ES風格的導入語法(import Vue from 'vue')。新的類型將正式轉換至ES風格的導入/導出語法,這樣上述配置就不須要了,並且用戶在全部狀況下都要使用ES風格的導入。
  • 爲了配合語法的變化,下述有Vue核心類型依賴的庫將會有主版本更新,須要跟隨Vue2.5進行升級:vuex, vue-router, vuex-router-sync, vue-class-component
  • 如今,當增長自定義模塊時,用戶須要使用interface VueConstructor來代替namespace Vue(差別對比)
  • 若是你使用as ComponentOptions<something>來註釋你的組件配置,像computed, watch, render和生命週期鉤子這種類型的須要手動進行類型註釋。

咱們盡力去減少升級成本,並使這些類型改進與vue-class-component中使用的基於類的API兼容。對於絕大多數用戶,只須要升級依賴關係,並切換至ES風格的導入就好。同時咱們建議你在準備好升級前,將你的Vue版本鎖定在2.4.xnpm

藍圖:vue-cli中的TypeScript類型支持

在2.5版本後,咱們計劃在下個vue-cli版本中去引入官方TypeScript支持,以便TS+Vue用戶能輕鬆的啓動新項目。敬請期待吧!json

對於非TypeScript用戶

這些改動不會對非TypeScript用戶產生負面影響;就公共JavaScript API而言,2.5會徹底向下兼容,TypeScript CLI集成也能夠徹底的選擇性加入。可是正如剛纔所提到的,若是你使用vue-language-server編輯器擴展,你會收到更好的自動補全提示。編輯器

this

感謝 Daniel Rosenwasser, HerringtonDarkholme, KatashinPine Wu 對這些特性作出的工做和對這篇文章的審覈。

相關文章
相關標籤/搜索