此文已由作者张汉锐授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

vuex-class

提供了和 vuex 相关的全部装饰器,从而解决了上面 Vue.extend + vuex 的 「代码提示」「代码重构」两个问题,然后再通过手动添加类型声明,使得「类型检查」的工作也能生效

全部装饰器有:

  • @State

  • @Getter

  • @Action

  • @Mutation

还有一个辅助函数:

  • namesapce  (用得比较少)

具体用法也很明确,看例子:

import Vue from 'vue'import Component from 'vue-class-component'import {State,Getter,Action,Mutation,namespace
} from 'vuex-class'const ModuleGetter = namespace('path/to/module', Getter)@Component
export class MyComp extends Vue {  // 声明 state,getter, action, mutation等,并手动添加类型@State('foo') stateFoo: number @State(state => state.bar) stateBar: string@Getter('foo') getterFoo: number  @Action('foo') actionFoo: () => void@Mutation('foo') mutationFoo: () => void@ModuleGetter('foo') moduleGetterFoo: number  // If the argument is omitted, use the property name// for each state/getter/action/mutation type@State foo@Getter bar@Action baz@Mutation quxcreated () {    this.stateFoo // -> store.state.foothis.stateBar // -> store.state.barthis.getterFoo // -> store.getters.foothis.actionFoo({ value: true }) // -> store.dispatch('foo', { value: true })this.mutationFoo({ value: true }) // -> store.commit('foo', { value: true })this.moduleGetterFoo // -> store.getters['path/to/module/foo']}
}

vue-mixin

这个库提供的装饰器,专门用于处理 vue 使用 mixin 的情况。装饰器如下:

  • @Mixin

  • @Mixins

  • @Component : 对 vue-class-component 的封装。在结合 vue-class-component 的时候,请使用这个 component

按照文档的例子,看下面 gif

另外,也支持多个 mixin ,详情查看文档介绍 vue-mixin-decorator

小结

介绍到这里,通过加入几个装饰器,已经能够保证 vue + ts 有了最基础的开发体验了。

虽然代码形式上有很大的变化,实际上还是 vue 的模样(穿了马甲,23333)。

其他:插件类型声明, Store.state 类型声明

插件类型声明

vue 文档在 typescript 那一节已经有介绍,这里就不再介绍,看 gif 吧

Store.state

为了更好的开发体验,在访问 this.$store.state 的时候有代码提示和类型检查。目前版本(3.0.1) vuex 的类型声明还不允许这么做,需要 hack 下才能实现。

具体的 hack 方式是,通过  tsconfig.json 屏蔽官方的 vuex.d.ts 文件,拷贝一份到 typings/vuex.d.ts,然后对 vuex 的 Store 声明成自己的类型。

// tsconfig.json
{..."paths": {"vuex": ["typings/vuex.d.ts"], // 这里}...}
// typings/vuex.d.ts import { RootState } from '../src/store';declare module "vue/types/options" {interface ComponentOptions<V extends Vue> {      // 这里声明成自己的类型就行store?: Store<RootState>;}
}declare module "vue/types/vue" {interface Vue {$store: Store<RootState>;}
}

详细的前因后果,参考 Write Stores in Typescript  的讨论

总结

到这里,基本上 vue + ts 的体验就会非常的好了,能够利用到「代码提示」「类型检查」「代码重构」等非常便利的工具,代码质量会在一定程度上有提升。期望在 vue 未来的版本上,能够对 ts 有更好的支持,使得在 vue 全家桶和 ts 集成的时候,成本更低。

免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击。

相关文章:
【推荐】 数据库路由中间件MyCat - 源代码篇(1)
【推荐】 Omad群组部署、依赖部署一键解决
【推荐】 客户端SDK测试思路

转载于:https://www.cnblogs.com/163yun/p/9908074.html

使用 typescript ,提升 vue 项目的开发体验(2)相关推荐

  1. 使用 typescript ,提升 vue 项目的开发体验(1)

    此文已由作者张汉锐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言:对于我们而言,typescript 更像一个工具 官方指南 从 vue2.5 之后,vue 对 ts ...

  2. Vue项目构建开发入门

    Vue项目构建开发入门 开篇:Vue CLI 3 项目构建基础 大家好,当你点进这个标题,开始阅读本章的时候,说明你对 Vue.js 是充满好奇心和求知欲的.我之前写过一篇文章,这样评价 Vue.js ...

  3. Typescript在Vue项目中的使用

    最近尝试了一下Typescript在Vue项目中的使用,中间遇到了一些问题,把遇到的问题记录一下,以防被忘. 如何让Typescript识别Vue.JSON文件 因为Typescript默认不能识别. ...

  4. [vue] 分析下vue项目本地开发完成后部署到服务器后报404是什么原因呢?

    [vue] 分析下vue项目本地开发完成后部署到服务器后报404是什么原因呢? 1.检查nginx配置,是否正确设置了资源映射条件: 2.检查vue.config.js中是否配置了publicPath ...

  5. 加快Vue项目的开发速度

    加快Vue项目的开发速度 现如今的开发,比如是内部使用的管理平台这种项目大都时间比较仓仓促.实际上来说在使用了webpack + vue 这一套来开发的话已经大大了提高了效率.但是对于我们的开发层面. ...

  6. 用Docker搭建Laravel和Vue项目的开发环境

    在这篇文章中我们将通过Docker在个人本地电脑上构建一个快速.轻量级.不依赖本地电脑所安装的任何开发套件的可复制的Laravel和Vue项目的开发环境(开发环境的所有依赖都安装在Docker构建容器 ...

  7. 浅谈vue项目进阶开发-杂谈1

    写这一篇完全是想把自己平时对vue的使用体验与理解看记录下来,如有错误欢迎指正. 1.router的beforeEach与afterEach钩子函数 在开发vue项目时遇到这样两个问题:第一个问题是用 ...

  8. 如何用 TypeScript 编写 Vue 项目

    TypeScript TypeScript 是 JavaScript 的一个超集,大家可以理解为是 JavaScript 的另一种写法.它可以通过 TypeScript 编译器或 Babel 转译为 ...

  9. 教你搭建基于typescript的vue项目

    自尤大去年9月推出vue对typescript的支持后,一直想开箱尝试,对于前端sr来说,vue的顺滑加上ts的面向对象,想着就非常美好~ 终于在两个月前,找到了个机会尝试了一把vue+ts的组合. ...

  10. Vue项目区分开发环境问题

    记录背景 在Jenkins持续构建项目时,出现的IP和Port变化的情况. 也考虑到后期会换底层数据库,Redis配置和上传下载路径,可能会随着服务器的不同配置多台不同的环境变量. 所以区分一下各自开 ...

最新文章

  1. bapi sap 创建物料_SAP使用BAPI创建物料主数据的最小输入-阿里云开发者社区
  2. LAMP(4)Apach和php结合、Apache默认虚拟主机
  3. token 过期刷新令牌_OkHttp实现全局过期token自动刷新
  4. modprobe:用于向内核中加载模块或者从内核中移除模块
  5. python飞机大战3关BOSS
  6. AI:IPPR的数学表示-CNN结构/参数分析
  7. Oracle 获取每月最后一天的函数
  8. iOS开发之在地图上绘制出你运行的轨迹
  9. canal 增量订阅mysql消息
  10. 应用商店应用计算机,应用市场电脑版
  11. VS2017超有用秘钥(亲测)
  12. Java完成excel表格导出
  13. OAuth2授权原理
  14. 如何修复老照片,Bringing-Old-Photos-Back-to-Life机器学习开源项目安装使用 | 机器学习
  15. cubase打开时,别的软件和网页无法正常播放视频。
  16. 使用Vue_cli搭建SPA项目
  17. 链路预测 matlab,链路预测
  18. jQuery中ajax跨域请求
  19. windows7系统损坏修复_利用老毛桃系统修复Windows引导故障
  20. interrupt request level - IRQL (驱动开发中关于IRQL级别说明)

热门文章

  1. Struts2之Action的基本配置
  2. [渝粤教育] 云南大学 高级语言程序设计 参考 资料
  3. 【渝粤教育】国家开放大学2018年秋季 1301T病理生理学 参考试题
  4. 【渝粤教育】电大中专药物分析技术基础_1作业 题库
  5. [渝粤教育] 中国地质大学 大学英语(4) 复习题
  6. 【Python实例第17讲】均值偏移聚类算法
  7. Pandas系列(三)新增数据列
  8. ubuntu16.04 kinetic 版本ROS安装PR2
  9. Replica set 的选举策略之一 (转)
  10. Python分布式爬虫打造搜索引擎(四)