自Vue 2.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 引入了許多新功能,這樣就能夠改進Vue的類型聲明從而使得 TypeScript 能夠更好地理解基於對象字面量的 API。 來自 TypeScript 團隊的 Daniel Rosenwasser 開始了一個雄心勃勃的PR(如今由核心團隊成員 HerringtonDarkholme 在這維護),一旦合併,將提供:github
this
可使用適當的類型推斷。 它也能夠在單文件組件中工做!props
選項,對於 this
中的 props 輸入推斷。vue-language-server
來提供相似的功能。
對於那些好奇的人,你能夠經過克隆這個 playground 項目(確保獲取 new-types
的分支)並使用 VSCode + Vetur 打開它來嘗試一下!vue-router
輸入升級將在 Vue 2.5 中發佈,目前計劃在10月初發布。 咱們正在發佈一個小版本,由於 JavaScript 公共 API 沒有任何突破性的變化,可是升級可能須要現有的 TypeScript + Vue 用戶採起一些操做。 這就是爲何咱們如今宣佈改變,以便你有足夠的時間來計劃升級。vuex
tsconfig.json
設爲 「allowSyntheticDefaultImports」: true
從而在任何地方使用 ES 風格的導入(import Vue from 'vue'
)。 新的輸入將正式轉換爲ES風格的導入/導出語法,所以再也不須要配置,而且用戶在全部狀況下都須要使用ES風格的導入。vuex
, vue-router
, vuex-router-sync
, vue-class-component
將會收到新的主要版本,而且應與 Vue 核心 2.5 一塊兒升級。interface VueConstructor
而不是 namespace Vue
。(example diff)ComponentOptions <Something>
對組件選項進行註釋,則此類型的 computed
,watch
,render
和生命週期鉤子將須要手動類型註解。咱們盡力減小所需的升級工做,這些類型的改進與 vue-class-component
中使用的基於類的 API 兼容。 對於大多數用戶來講,只需升級依賴並切換到ES風格的導入便可。 同時,咱們還建議你將Vue 版本鎖定到2.4.x,直到你準備升級爲止。vue-cli
2.5以後,咱們計劃在下一個版本的 vue-cli 中引入對TypeScript 的官方支持,以便使 TS + Vue 用戶更輕鬆地啓動新項目。 敬請關注!npm
這些更改不會以任何負面的方式影響非 TypeScript Vue 用戶; 根據公共JavaScript API,2.5 將徹底向後兼容,而且TypeScript CLI集成將徹底選擇加入。 可是如上所述,若是你使用vue-language-server強大的編輯器擴展,則會注意到更好的自動完成建議。json
—服務器
感謝 Daniel Rosenwasser, HerringtonDarkholme, Katashin 以及 Pine Wu 對於這些特性的工做以及對這篇文章的審閱。編輯器