指南
基础概要
- 安装
 - 介绍
 - Vue 实例
 - 模板语法
 - computed 属性和 watcher
 - class 和 style 绑定
 - 根据条件进行渲染
 - 列表渲染
 - 事件处理
 - 表单 input 绑定
 - 组件基础
 过渡 & 动画
- 进入、离开和列表的过渡
 深入组件
- 组件注册
 - props
 - 自定义事件
 - slot
 - 动态组件和异步组件
 - Handling Edge Cases
 - 状态间的过渡
 可重用 & 合成
- mixin
 - 自定义指令
 - render 函数 & jsx
 - 插件
 - 过滤器
 工具
- 生产环境部署
 - 单文件组件
 - 单元测试
 - TypeScript 支持
 扩展升级
- 路由
 - 状态管理
 - 服务端渲染
 内部原理
- 深入响应式原理
 升级迁移
- 从 Vue 1.x 迁移
 - 从 Vue Router 0.7.x 迁移
 - 从 Vuex 0.6.x 迁移到 1.0
 其他更多
- 对比其他框架
 - 加入 Vue.js 社区
 - 认识团队
 
TypeScript 支持
在 Vue 2.5.0+ 中,我们极大改善了类型声明,以使用默认的基于对象(object-based)的 API。同时也引入了一些变化,需要进行相应的升级操作。阅读博客文章了解更多详情。
发布于 NPM 包中的官方声明
静态类型系统(static type system)可以辅助防止许多潜在的运行时错误,特别是随着应用程序的增长。这就是为什么 Vue 使用 TypeScript 官方的类型声明 - 不仅是用在 Vue 核心本身,也用在 vue-router 和 vuex。
由于这些声明文件发布于 NPM,并且最新版的 TypeScript 知道如何从 NPM 包中解析类型声明,这意味着,通过NPM 安装后,你甚至不需要任何额外工具,就可以对 Vue 使用 TypeScript:
我们还计划在不久的将来在 vue-cli 中提供一个集成 Vue + TypeScript 项目的脚手架。
推荐配置
// tsconfig.json  | 
请注意,必须包含 strict: true(或至少 noImplicitThis: true,这是 strict 模式的一部分),以便利用组件方法中 this 的类型检查,否则会把它视为 any 类型。
有关更多详细信息,请查看 TypeScript 编译器(compiler)选项文档。
开发工具
为了使用 TypeScript 开发 Vue 应用程序,我们强烈建议使用 Visual Studio Code,它为 TypeScript 提供了开箱即用的良好支持。
如果你正在使用单文件组件(SFC),请使用酷炫的 Vetur 扩展,它提供了在单文件组件中进行 TypeScript 推断和许多其他强大的功能。
WebStorm 也为 TypeScript 和 Vue.js 提供了开箱即用的良好支持。
基本用法
为了让 TypeScript 正确地推断 Vue 组件选项中的类型,你需要使用 Vue.component 或 Vue.extend 定义组件:
import Vue from 'vue'  | 
class 风格的 Vue 组件(Class-Style Vue Components)
如果你在声明组件时,更喜欢基于类(class-based)的 API,则可以使用官方维护的 vue-class-component 装饰器:
import Vue from 'vue'  | 
扩充类型以配合插件使用(Augmenting Types for Use with Plugins)
插件(plugins)可能会添加 Vue 的全局/实例属性和组件选项。在这种情况下,为了使插件可以在 TypeScript 中正常编译,需要类型声明。幸运的是,TypeScript 有一个名为模块补充(module augmentation)的特性,可以扩充现有的类型。
例如,如果想要声明一个 string 类型的实例属性 $myProperty:
// 1. 请确保在声明扩充的类型之前 import 'vue'  | 
在你的项目中,使用上面作为声明文件(例如 my-property.d.ts)的代码后,你就可以在 Vue 实例上使用 $myProperty 了。
var vm = new Vue()  | 
还可以声明额外的全局属性和组件选项:
import Vue from 'vue'  | 
以上声明,可以使下面的代码成功编译:
// 全局属性  | 
标注返回类型
由于 Vue 声明文件的循环特性,TypeScript 可能很难推断某些方法的类型。因此,你可能需要为 render 方法和 computed 对象上的方法标注返回类型。
import Vue, { VNode } from 'vue'  | 
如果你发现类型推断或成员补齐无法正常使用,标注某些方法可能有助于解决这些问题。使用 --noImplicitAny 选项,会有助于找出这些未标注的方法。