【发布时间】:2020-04-30 17:04:11
【问题描述】:
在我的 Vue 插件中,我在 install 期间将 Vuex 存储作为选项的一部分传递
main.ts(主项目):
import store from "./store/";
Vue.use(Camera, { store });
new Vue({
router,
store,
render: h => h(AppName)
}).$mount("#app");
main.ts(在插件中):
export default {
install(Vue, options: any) {
var result = options.store.getters['getFeaturesList']; // result is the correct object I need
Vue.prototype.$myStore = function() {
return options.store;
}
Vue.component("camera-control", Camera);
}
}
但是,当我尝试访问插件内部组件中的原型属性时,它告诉我Property '$myStore' does not exist on type 'Camera'
Camera.vue(在插件中)
public getFeatureList() {
const featuresList = this.$myStore().getters["getFeaturesList"]; //error
}
我假设安装函数和组件中的实例不一样,因此为什么它给我错误,但我需要能够从插件访问主项目的商店 - 这甚至可能吗?我如何才能进入商店?
【问题讨论】:
-
您混淆了编译和运行时错误。问题是 TypeScript 打字。这个问题甚至没有提到 TypeScript。另外,一个地方是
myStore,另一个地方是$myStore,所以也应该有运行时错误。 -
@Estus Flask 感谢您指出错字,我必须在格式化问题时删除了 $。我不明白为什么这个问题应该提到 TypeScript,甚至是什么问题。可以扩展一下吗?
-
你提到的错误是Typescript编译错误(它提到了type 'Camera',JS没有类型的概念)。这完全是 TS 问题。可以使用
this['$myStore']().getters.getFeaturesList消除错误。提供正确的类型更可取。
标签: typescript vue.js vuejs2 vuex