Как набрать Vue.component с использованием машинописи? - PullRequest
1 голос
/ 25 октября 2019

У меня есть функция util, которая сбрасывает все данные некоторого компонента Vue.

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

И я пытаюсь удалить любой тип моего Vue.component, возможно ли это? Есть какой-нибудь интерфейс, который предназначен для $ data от Vue?

Мне нужно получить этот тип:

enter image description here

1 Ответ

1 голос
/ 26 октября 2019

Обратите внимание, что для функции 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));
}

Код становится немного многословным, но теперь он довольно трудоемкийсобственный набор текста

...