vuejs3 - vue3 typescript komponent nemôže volať metódu v globálnom mixine


S týmto bojujem asi týždeň, takže ak niekto vie, bol by som vďačný, keby mi mohol pomôcť.

Konvertujem kód založený na Vue2 na Vue3 ako nový projekt. Nepoužívam Composition API, ale používam ho ako objektovo založený komponent.

Keďže sú importované a používané aj externé moduly napísané v TypeScript, komponent je zabalený pomocou defineComponent().

Všetko funguje dobre, ale problémom je časť s globálnym mixinom. Ako je popísané v oficiálnej dokumentácii Vue, mixin napísaný v *.js bol zaregistrovaný ako globálny mixin pomocou app.mixin().

 // mixin.js 
 export default {
   methods: {
     registerBackButtonCallback() {}
   }
 }

Ak zavolám this.registerBackButtonCallback() v súbore komponentu,

Typ 'never' nemá žiadne volacie podpisy

chyba a kompilácia zlyhá. ale volanie this.registerBackButtonCallback() funguje dobre, keď ho používam ako lokálny mixin.

Chyba sa vyskytne iba vtedy, keď je nastavené <script lang="ts">. Kompiluje sa bez chyby, keď je možnosť "strict" alebo "noImplicitThis" v "tsconfig.json" nastavená na false.

Z vyššie uvedených dôvodov si myslím, že táto chyba musí súvisieť s typescriptom. Myslel som si, že by bolo dobré urobiť typovanie argumentov, takže v src/shims-vue.d.ts som sa pokúsil pridať to, ako je uvedené nižšie, ale stále dostávam túto chybu.

declare module 'vue/types/vue' {
  interface Vue {
    registerBackButtonCallback: () => void
  }
}

Skúšal niekto volať metódu globálneho mixinu s script lang="ts" vo Vue3 komponente?

Veľmi ďakujem za tvoju radu.

Odpoveď č. 1

Prispôsobovanie typu Vue je prax vo Vue2. Vo Vue3 sa vlastné vlastnosti definujú v ComponentCustomProperties z '@vue/runtime-core'