我已经为此苦苦挣扎了大约一个星期,所以如果有人知道,如果您能提供帮助,我将不胜感激。
我一直在将基于 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 的方法?
非常感谢您的建议。