自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 对这些特性作出的工做和对这篇文章的审核。