ts2339 error: how to use typescript mixin in vuejs project?

ts2339 error: how to use typescript mixin in vuejs project?

我最近将我的 vuejs 转换为 typescript base,但现在我在 typescript 中使用 mixin 时遇到问题。 我使用了两种类型的 mixin,但 none 对我有用,它显示错误 ts2339,我无法在 https://vuejs.org/v2/guide/typescript.html#Basic-Usage 上找到解决方案: 第一个:

//mixin.ts
import {ViewState} from "@/types";
import {mocked_view_state} from "@/api/mock/profile.device.group.mock";

export const ProfileDeviceGroup = {
  methods: {
    resetViewState(): ViewState {
      return mocked_view_state;
    }
  }
};

第二个:

//mixin.ts
import Vue from "vue";
import {ViewState} from "@/types";
import {mocked_view_state} from "@/api/mock/profile.device.group.mock";

const ProfileDeviceGroup = Vue.extend({
  methods: {
    resetViewState(): ViewState {
      return mocked_view_state;
    },

  }
});
export default ProfileDeviceGroup;

那么,有什么办法可以解决这个问题吗?

.......

更新:

.......

使用vue-typed-mixins后,问题已经解决,但又暴露出另一个问题,如下图所示:

您可以使用像 vue-typed-mixins or migrate to the Vue class component 模式这样的包并使用 implements.

@Component
export default class ComponentWithMixins extends Vue implements MyMixin {}

如果您使用的是 vue-property-decorator,它也内置了对 mixins 的支持:

@Component
export default class ComponentWithMixins extends mixins(MyMixin) {}

基于这个问题 https://github.com/ktsn/vue-typed-mixins/issues/4 这是我在 vue-typed-mixins 的 github 中创建的,这是一个未修复的问题,作者认为 webstorm 和 Vuetr 插件应该修复,并且它与 vue-typed-mixins 无关。 但是我认为问题仍然与vue-typed-mixins插件有关,但我希望问题能尽快解决并且应该感谢vue-typed-mixins团队的作者,以及webstorm团队和Vuetr。

对于那些(像我一样)想要继续使用 vue+typescript 的人来说,似乎有一个更好的方法来解决这些问题,那就是 vue2-composition-api,一些团队一直在使用它,并告诉我它可以使用 typescript,并且没有问题,因为不再需要使用 mixin。

我希望它有用...

不确定这是否仍然相关,但我通过查看 vue-router 类型定义文件发现,您可以通过在 @vue/runtime-core模块。

您应该能够通过将此添加到您的 mixin.ts 文件来包含所有类型定义:

declare module '@vue/runtime-core' {
    export interface ComponentCustomProperties {
        resetViewState: () => ViewState;
    }
}

但是我只在 vscode 中使用 vue3 和常规的单文件组件测试过这个,有时需要重新加载当前 vscode window 以应用所有类型对运行时核心的更改。