Vyhledávání na webu

vuejs3 - komponent Vue3 v TypeScript nemůže volat metodu v globálním mixinu


S tímto bojuji už asi týden, takže bych byl vděčný, kdyby mi někdo mohl pomoci.

Převádím kód založený na Vue2 na Vue3 jako nový projekt. Nepoužívám Composition API, ale používám to způsobem komponent založeným na objektech.

Protože jsou také importovány a používány externí moduly napsané v TypeScriptu, komponenta je zabalena pomocí defineComponent().

Vše funguje dobře, ale problém je v části s globálním mixinem. Jak je popsáno v oficiální dokumentaci Vue, mixin napsaný v *.js byl zaregistrován jako globální mixin pomocí app.mixin().

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

Pokud zavolám this.registerBackButtonCallback() v souboru komponenty,

Typ 'never' nemá žádné volací podpisy

chyba a kompilace selhává. ale volání this.registerBackButtonCallback() funguje dobře, když jej použiji jako lokální mixin.

Chyba nastane pouze tehdy, když je nastaveno <script lang="ts">. Kompiluje se bez chyby, pokud je v "tsconfig.json" nastaveno "strict" nebo "noImplicitThis" na false.

Z výše uvedených důvodů si myslím, že tato chyba musí souviset s TypeScriptem. Myslel jsem, že by bylo dobré dělat typové argumenty, takže v souboru src/shims-vue.d.ts, jako je ten níže, jsem se to pokusil přidat, ale stále dostávám chybu.

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

Zkoušel někdo volat metodu globálního mixinu se skriptovým jazykem "ts" ve Vue3 komponentě?

Moc děkuji za tvoji radu.

Odpověď č. 1

Přizpůsobení typu Vue je praxe ve Vue2. Ve Vue3 jsou vlastní vlastnosti definovány v ComponentCustomProperties z '@vue/runtime-core'