0

我最近将我的 vuejs 转换为 typescript base,但现在我在 typescript 中使用 mixin 时遇到了问题。我使用了两种类型的 mixin,但没有一种对我有用,它显示错误 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 后,问题已解决,但另一个问题暴露出来,如下图所示: 在此处输入图像描述

4

3 回答 3

1

您可以使用像vue-typed-mixins这样的包,或者迁移到Vue 类组件模式并使用implements.

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

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

@Component
export default class ComponentWithMixins extends mixins(MyMixin) {}
于 2020-01-20T17:25:14.330 回答
0

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

对于那些(像我一样)想要继续使用 vue+typescript 的人,似乎有更好的方法来解决这些问题,即vue2-composition-api,一些团队一直在使用它并告诉我使用typescript 没问题并且没有问题,因为不再需要使用 mixin。 vuejs2.x composition api 是否与 typescript 完全兼容?

我希望它工作...

于 2020-01-25T10:53:02.733 回答
0

不确定这是否仍然相关,但我通过查看 vue-router 类型定义文件发现,您可以通过扩展 @vue/runtime-core 模块中的 ComponentCustomProperties 接口来为您的 mixin 手动添加所有必要的类型。

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

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

但是,我只在 vscode 中使用带有常规单文件组件的 vue3 进行了测试,有时需要重新加载当前的 vscode 窗口才能将所有类型更改应用于运行时核心。

于 2021-11-04T21:26:08.863 回答