最近真的陷入了TypeScript无法自拔,我甚至有一种感觉ts可能会成为前端必须要掌握的一项技术(就像现在前端从业者必须得掌握三大框架之一一样)。
但现在使用vue+TypeScript来开发项目的其实还是比较少的,Vue
的作者尤雨溪在知乎上回答过这么一个问题TypeScript 不适合在 vue 业务开发中使用吗?,根据他本人的回答,现在的vue2.x版本对TS的支持是远不如React和Angular的,所以在即将发布的vue3.0要加强这一块。
但是因为vue-class-component
与vue-property-decorator
(前者的升级版本,加入了Vue,Watch,Emit等功能)的存在,现在使用TS+vue来写项目也不是什么问题,虽然还有些稍许的bug,不过无伤大雅
在前面的博客里我介绍过如何使用TypeScript如何搭建store文件夹,所以这篇博文主要做一个用JS与TS编写vue文件的区别。(引入的是vue-property-decorator
,全部介绍完基本上是不可能的,这里结束的是平时用的多的)
#data,computed,methods
JS写法
1 | export default { |
TS写法
1 | import {Component,Vue} from 'vue-property-decorator'; |
@Component({options})
中接受的options就是传统的配置,mixin
,自定义指令,子组件的注册都要在这里声明
#watch
JS写法
1 | export default { |
TS写法
1 | import {Vue,Watch,Component} from 'vue-property-decorator' |
#props #directives
JS写法
1 | export default { |
TS写法
1 | import {Vue,Component,Prop} from 'vue-property-decorator'; |
@Model
前提条件,在父组件中,对子组件使用了
v-mode="checked"
父组件
1 | <checkbox v-mode="checked" ></checkbox> |
子组件
1 | <input type="checkbox" :checked="checked" @change="change"/> |
JS写法
1 | // 子组件中 |
TS写法
1 | import {Vue,Component,Model,Emit} from "vue-property-decorator"; |
@Emit
父组件
1 | <add-component @on-add="addFunction"></add-component> |
有一个可以做加减法的子组件,如下
1 | <div> |
JS写法
1 | export default { |
TS写法
1 | import {Vue,Component,Emit} from 'vue-property-decorator'; |
@Provide @Inject
通常provide
与inject
是配合使用的,一般使用在插件与组件库中,在父组件中通过provide
提供一些数据,他的所有子组件,都能都通过inject
注入到自己的组件中,并且通过this
来调用。
provide:Object | () => Object
inject:Array<string> | { [key: string]: string | Symbol | Object }
JS用法
1 | // 父组件 |
TS用法
1 | // 父组件 |
综上所写,使用TS与使用JS编写vue文件的区别就全部罗列完了
但应该还有很多遗漏的点,如果你有什么补充,欢迎在留言区评论。