vue.js - Cum să tastezi un Vue.component folosind TypeScript?


Am o funcție utilitară care resetează tot conținutul de date al unui anumit component Vue.

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

Și încerc să elimin tipul „any” al Vue.component-ului meu, este posibil? Există vreo interfață care să țintească $data din Vue?

Trebuie să obțin acest tip:

Răspuns #1

Rețineți că funcția resetData necesită un parametru de tip instanță Vue

În acest caz, importă Vue din pachetul "vue" și îl folosește ca tip

import Vue from "vue";

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

Obiectul Vue are parametrii $data și $options așa cum era de așteptat.

Problema rămasă este să știm ce conține obiectul $options.data. Odată ce data este de un tip necunoscut, dar îl folosim ca pe o funcție, cu alte cuvinte: ()=>void. Altfel, va genera o eroare de sintaxă.

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

Codul final fără erori de compilare va fi ca

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

Codul devine puțin verbose, dar acum este bine strâns în ceea ce privește propriul său tipaj