[英]How to fix linter issues with mixins in vue-typescript?
I have a project that I'm trying to create mixins for and the methods in the mixin react with data from the component and other methods.我有一个项目,我正在尝试为其创建 mixin,并且 mixin 中的方法与来自组件和其他方法的数据发生反应。 I'm getting errors on all of my components from veture stating that the method doesn't exist on the combined vue instance.我从 veture 收到关于我所有组件的错误,指出该方法在组合的 vue 实例中不存在。 The code works and I can see the mixins working but I'm curious as to what I should do to get rid of the linting errors I'm seeing in my project as well.代码有效,我可以看到 mixin 正在工作,但我很好奇我应该怎么做才能摆脱我在项目中看到的 linting 错误。 I'm seeing Vetur complaints on the code in vscode, however, I'm also seeing complaints on ts-lint in the console.我在 vscode 中看到 Vetur 对代码的抱怨,但是,我也在控制台中看到了对 ts-lint 的抱怨。
What are causing these errors and how can I fix them?是什么导致了这些错误,我该如何修复它们? It's popping up multiple times for the components that use the same code and I thought mixins would be a good idea for re-usable code but it's becoming a hassle.对于使用相同代码的组件,它会多次弹出,我认为 mixins 是可重用代码的好主意,但它变得很麻烦。
export default Vue.extend({
name: 'RecentRequests' as string,
data() {
return {
requests: [] as Request[],
workflows: [] as Workflow[],
environment: `${process.env.VUE_WEB_API}`,
search: '',
}
},
async created() {
await RequestService.getRequest().then((response) => {
this.$data.requests = response.Data;
}).catch((err) => {
this.$data.requests = null;
this.$data.topFive = null;
this.$store.dispatch('updateErrorMessage', {message: `${err}`});
this.$store.dispatch('updateError');
});
await WorkflowService.getWorkflow().then((response) => {
this.$data.workflows = response.Data;
}).catch((err) => {
this.$data.requests = null;
this.$data.topFive = null;
this.$store.dispatch('updateErrorMessage', {message: `${err}`});
this.$store.dispatch('updateError');
});
},
mixins: [globalMixins],
computed: {
filteredRequests() {
let searchTerm = this.search.toLowerCase();
let topFive: any = this.topFive()
if(this.search === null || this.search === '') {
return topFive
} else {
return topFive.filter((item: any) => {
return item.WorkflowDisplayName.toLowerCase().includes(searchTerm);
});
}
}
},
methods: {
topFiveRequests() {
// combine workflows first before running
this.combineRequestsAndWorkflows(this.$data.requests, this.$data.workflows);
// make copy of requests array
const requestsCopy = this.$data.requests.map((x: Request) => x);
// sort array by most recent
const mostRecentRequests = requestsCopy.sort((a: any, b: any) => {
const dateA: any = new Date(a.timeRequested);
const dateB: any = new Date(b.timeRequested);
return dateB - dateA;
});
const result = mostRecentRequests.splice(0, 4);
return result;
},
},
})
</script>
I一世
The problem is Typescript is not smart enough to know, what mixins actually are in Vue.问题是 Typescript 不够聪明,无法知道 Vue 中的 mixin 到底是什么。 You have 2 options:您有 2 个选择:
Vue.extend
you can use YourMixin.extend
.由于混入延伸Vue的,在你的组件,而不是Vue.extend
可以使用YourMixin.extend
。 Note that this solution would work only in case of a single mixin.请注意,此解决方案仅适用于单个 mixin。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.