如何使用打字稿键入Vue.component?

时间:2019-10-25 19:49:50

标签: typescript vue.js vue-component

我有一个util函数,可以重置某些Vue组件的所有数据内容。

export function resetData(vm: any) {
  Object.assign(vm.$data, vm.$options.data.call(vm));
}

并且我正在尝试删除Vue.component的“任何”类型,这可能吗?是否有针对Vue中$ data的接口?

我需要获得这种类型:

enter image description here

1 个答案:

答案 0 :(得分:1)

请注意,resetData函数需要Vue Instance参数

在这种情况下,从Vue包中导入"vue"并将其用作类型

import Vue from "vue";

export function resetData(vm: Vue) { ... }

Vue对象具有预期的$data$options参数。

剩下的问题是知道对象$options.data的内容。一旦data是未知类型,但我们将其用作函数,换句话说:()=>void。否则会引发语法错误。

Object.assign(vm.$data, (vm.$options.data as ()=>void).call(vm));

没有编译错误的最终代码将是

import Vue from "vue";
export function resetData(vm: Vue) {
    Object.assign(vm.$data, (vm.$options.data as ()=>void).call(vm));
}

代码变得有些冗长,但现在可以自行键入了