1

我已经为此苦苦挣扎了大约一个星期,所以如果有人知道,如果您能提供帮助,我将不胜感激。

我一直在将基于 vue2 的代码转换为 vue3 作为一个新项目。我不使用 coposition api,而是将其用作基于对象的组件方式。

由于用 typscript 编写的外部模块也被导入和使用,因此该组件用 defineComponent() 包装。

一切正常,但全局 mixin 部分是问题所在。正如vue官方文档中描述的那样,用*.js编写的mixin通过app.mixin()注册为全局mixin。

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

如果我在组件文件中调用 this.registerBackButtonCallback() ,

'类型'从不'没有呼叫签名'

错误和编译失败。但是当我将它用作本地混合时,调用 this.registerBackButtonCallback() 效果很好。

仅当设置了 <script lang="ts"> 时才会发生错误。当“tsconfig.json”中的“strict”或“noImplicitThis”选项设置为false时,它编译不会出错。

由于上述原因,我认为这个错误一定与 typescript 有关。我认为进行类型论证会很好,所以在 src/shims-vue.d.ts 中,就像下面的一样,我尝试添加它,但我仍然得到错误。

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

有没有人尝试在 vue3 组件中使用脚本 lang="ts" 调用全局 mixin 的方法?

非常感谢您的建议。

4

1 回答 1

0

自定义类型Vue是 Vue2 的做法。在 Vue3 中,自定义属性在'@vue/runtime-core' 的 ComponentCustomProperties中定义

于 2022-01-11T08:28:18.720 回答