vue语法自动转typescript(解放双手)

2020-06-12 21:08:05易采站长站整理

@Watch('e')
onE2Changed (val: any, oldVal: any) {}
@Watch('e', { immediate: true })
onE3Changed (val: any, oldVal: any) {}
@Watch('e.f')
onEFChanged (val: any, oldVal: any) {}
}

写法还是很多的,所以判断分支肯定少不了

watch下的每个属性都是一个需要进行 watch的 vue响应值,这些属性的值可以是字符串、函数、对象和数组,共四种类型
其中,字符串类型就是相当于调用当前 vue实例里的方法,函数类型就是调用这个函数,比较简单;

对于对象类型,其具有三个属性:handler、deep、immediate,三个属性都是可选,其中 handler的值是函数或字符串,其他两个属性的值都是 boolean类型;

对于数组类型,其每一个数组项,其实都相当于是字符串类型、函数类型和对象类型的聚合,所以实际上只要处理这三种类型即可,数组类型则直接遍历数组项,每个数组项的类型肯定在这三个类型之内,按照类型调用相应的处理方法即可。

这是主体部分,除此之外,还需要考虑 handler函数的形式,以下几种函数的写法都是合法的:


export default {
watch: {
a: function {},
b () {},
c: () => {},
d: async function {},
e: async () => {}
}
}

不仅在 watch里面,其他一些 vue实例属性,比如 created、computed等,只要是可能出现函数的地方,都需要考虑到这些写法
当然,除此之外,还有 Generator函数,但我这里不考虑,有更好的 async/await可用,为什么非要用 Generator

methods

vue实例的方法,都作为 methods这个对象的属性存在,每个方法都是一个函数,所以只需要将原 methods下的所有方法取出,转换为 class的方法即可,没什么工作量

不过需要注意的是,函数的写法有很多,还可以支持 async/await,这些写法都需要考虑到

lifeCycle

vue的生命周期钩子函数有很多,还有一些第三方的钩子函数,例如 vue-router:


const vueLifeCycle = ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'activated', 'deactivated', 'beforeDestroy', 'destroyed', 'errorCaptured', 'beforeRouteEnter', 'beforeRouteUpdate', 'beforeRouteLeave']

这些钩子函数其实就是函数,跟 methods的处理方法一样

component

这个比较简单,转化一下然后拼接


export default {
components: {
a: A,
B
},
}

上述转换为 ts对应如下:


@Component({
components: {
a: A,
B
}
})
export default class TransVue2TS extends Vue {}