自Vue2.0發佈以來,咱們一直在收到更好集成TypeScript的請求。從那時起,咱們已經爲大多數核心庫(vue
,vue-router
,vuex
)加入了官方的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
this
的正確的類型推斷。這也能在單文件組件中很好的運行!props
配置的this
的props
的類型推斷。運行中的 VSCode + Vetur + 新類型聲明vue-router
感興趣的話,就克隆這個體驗項目(確保是new-types
分支)並使用VSCode + Vetur打開它來嘗試一下吧。vuex
類型改進將在vue 2.5中實裝,目前計劃在十月初先後發佈。咱們正在發佈一個小版本,由於JavaScript公共API尚未取得突破性改變,可是,升級可能須要現有的Vue+TypeScript用戶進行一些操做。這也是咱們如今公佈改動的緣由,便於你有足夠的時間來規劃升級。vue-cli
tsconfig.json
中配置"allowSyntheticDefaultImports": true
來使用ES風格的導入語法(import Vue from 'vue'
)。新的類型將正式轉換至ES風格的導入/導出語法,這樣上述配置就不須要了,並且用戶在全部狀況下都要使用ES風格的導入。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.x
。npm
在2.5版本後,咱們計劃在下個vue-cli版本中去引入官方TypeScript支持,以便TS+Vue用戶能輕鬆的啓動新項目。敬請期待吧!json
這些改動不會對非TypeScript用戶產生負面影響;就公共JavaScript API而言,2.5會徹底向下兼容,TypeScript CLI集成也能夠徹底的選擇性加入。可是正如剛纔所提到的,若是你使用vue-language-server編輯器擴展,你會收到更好的自動補全提示。編輯器
—this
感謝 Daniel Rosenwasser, HerringtonDarkholme, Katashin 與 Pine Wu 對這些特性作出的工做和對這篇文章的審覈。