typescript - 使用组件属性的 Mixin(Vue 2、TypeScript)
问题描述
我有Vue
+TypeScript
项目,我们正在使用Vue class components
. 组件的方法之一被移动到单独的 mixin。该 mixin 使用组件的属性。为了防止TypeScript
' 抱怨缺少 mixin 属性,我创建了与 mixin 同名的接口:
export interface ExpSelectedHandlerMixin {
loading: boolean;
selected: VouchersPoolTable[];
currentApplication: string;
items: VouchersPoolTable[];
}
@Component({})
export class ExpSelectedHandlerMixin extends Vue {
// ...
}
然后像这样将mixin连接到我的组件:
import { Mixins } from 'vue-property-decorator';
export default class PageVouchersTable extends Mixins(ExpSelectedHandlerMixin) {
// ...
}
之后,我收到文本错误:
类“PageVouchersTable”错误地扩展了基类“ExpSelectedHandlerMixin & Vue & object & Record<never, any>”。类型“PageVouchersTable”不可分配给类型“ExpSelectedHandlerMixin”。属性“加载”在“PageVouchersTable”类型中是私有的,但在“ExpSelectedHandlerMixin”类型中不是私有的。
好的,我在组件中创建了loading
, selected
, currentApplication
,items
属性public
(只是删除了private
修饰符)。
这样可行。
但:
是否有可能以某种方式连接使用组件属性的mixin而不创建这些属性public
?
解决方案
决定去掉 mixin 文件中不必要的接口声明,保留public
组件中的共享属性。最终版本的代码是:
// Mixin
@Component({})
export default class ExpSelectedHandlerMixin extends Vue {
loading = false
items: VouchersPoolTable[] = []
selected: VouchersPoolTable[] = []
// ...
}
// Component
import { Mixins } from 'vue-property-decorator';
@Component({})
export default class PageVouchersTable extends Mixins(ExpSelectedHandlerMixin) {
// Next three properties are public to be accessible in ExpSelectedHandlerMixin
loading = false
items: VouchersPoolTable[] = []
selected: VouchersPoolTable[] = []
// ...
}
推荐阅读
- c++ - 如何将 3D 模型放置在人脸地标的顶部,例如人脸过滤器应用程序?
- python - 无法根据 python 中的另一列对 1 列进行分类
- sql - 通过常量值更新列
- java - 当body标签被style="overflow:hidden;"隐藏时如何切换到一帧
- tensorflow - 将 Keras 嵌入与正常模型合并到一个顺序模型中
- python - 如何避免尝试使用多条指令时出错?
- django - 如何将图像(例如从我的计算机)上传到我的 django-tinymce formField?
- firemonkey - iOS 延迟通知仅在应用关闭时触发 (FMX)
- reactjs - 导入我在 React 中制作的外部模块时是否必须使用构造函数?
- matlab - 在字符识别方面需要帮助