当使用mapGetters
时,TypeScript无法看到绑定到Vue组件的getter,因此会引发错误。示例:
import Vue from 'vue';
import { mapActions, mapGetters } from 'vuex';
export default Vue.extend({
computed: {
...mapGetters('ui', ['navCollapsed']),
minimizerIconClass(): string {
return `fa${this.navCollapsed ? '' : 'r'} fa-window-maximize`;
},
},
TypeScript正在大声谈论this.navCollapsed
:
TS2339: Property 'navCollapsed' does not exist on type 'CombinedVueInstance<Vue, {}, { openMobileMenu(): void; }, { minimizerIconClass: string; }, Readon...'.
我该如何解决这个问题?我能想出的唯一解决办法就是不使用mapGetters()
。
3条答案
按热度按时间00jrzges1#
我建议将vuex-class用于带Typescript的装饰器。
但是如果您不想使用额外的依赖项,我相信使用
this['navCollapsed']
而不是this.navCollapsed
应该可以解决编译错误。2wnc66cl2#
我也遇到了同样的问题,并采取了以下措施:
然后在我的店里,我定义:
现在,在我的组件中,我可以:
离完美还差得远,但是它可以检测传递给
mapGetters
的数组中的拼写错误,并且允许您在this
上使用(正确键入的)getter。但是,TypeScript将不知道您是否确实Map了所讨论的getter。
oyt4ldly3#
在我的例子中,mapGetters在计算之外。把它放在那里解决了错误。