自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 对于这些特性的工做以及对这篇文章的审阅。编辑器