Ionic with vuex 给出编译错误( 属性 '$store' does not exist on type )
Ionic with vuex gives compile error ( Property '$store' does not exist on type )
我想尝试在 Ionic 项目上使用 vuex,所以我刚刚使用 cli 创建了一个新项目并添加了 vuex 和一个简单的商店。我正在使用 typescript,当我尝试在我的组件中使用 this.$store
时出现编译错误。我已经为商店添加了一个定义文件:
// vuex.d.ts
import { ComponentCustomProperties } from 'vue'
import { Store } from 'vuex'
declare module '@vue/runtime-core' {
// declare your own store states
interface State {
count: number;
}
// provide typings for `this.$store`
interface ComponentCustomProperties {
$store: Store<State>;
}
}
而 vs-code 似乎正在阅读它,因为它提供了智能感知或它。 chrome 控制台记录了我能看到的内容。但它看起来不像编译器读取定义文件,因为它在浏览器中显示以下错误。
Failed to compile.
src/views/Tab1.vue:28:22
TS2339: Property '$store' does not exist on type '{ name: string; components: { ExploreContainer: { name: >string; props: { name: StringConstructor; }; }; IonHeader: DefineComponent<IonHeader & InputProps, >object, ... 9 more ..., {}>; IonToolbar: DefineComponent<...>; IonTitle: DefineComponent<...>; >IonContent: DefineComponent<...>; IonPage: DefineComponent<...>; };...'.
26 | components: { ExploreContainer, IonHeader, IonToolbar, IonTitle, IonContent, IonPage },
27 | mounted() {
28 | console.log(this.$store);
| ^^^^^^
29 | }
30 | }
31 |
您可以浏览此存储库中的代码:https://github.com/kebarvid/notifier
为了让它为你工作,你需要命名 vuex 声明文件 shims-vuex.d.ts
并在其中导入你的商店实例:
import { ComponentCustomProperties } from 'vue'
import store from '@/store'
interface State {
count: number;
}
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$store: store;
}
}
自己找到了答案。
我没有将我的组件包装在 defineComponent
函数中,如果我将 Tab1.bue 中的脚本部分从
更改
<script lang="ts">
import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
import ExploreContainer from '@/components/ExploreContainer.vue';
export default {
name: 'Tab1',
components: { ExploreContainer, IonHeader, IonToolbar, IonTitle, IonContent, IonPage },
mounted() {
console.log(this.$store);
}
}
</script>
以下
<script lang="ts">
import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
import ExploreContainer from '@/components/ExploreContainer.vue';
import { defineComponent } from 'vue';
export default defineComponent( {
name: 'Tab1',
components: { ExploreContainer, IonHeader, IonToolbar, IonTitle, IonContent, IonPage },
mounted() {
console.log(this.$store);
}
})
</script>
我没有得到编译错误。有点奇怪的是,当您使用 CLI 创建新应用程序时,默认情况下不会这样做,因为 ionic 希望您使用 TypeScript。
我想尝试在 Ionic 项目上使用 vuex,所以我刚刚使用 cli 创建了一个新项目并添加了 vuex 和一个简单的商店。我正在使用 typescript,当我尝试在我的组件中使用 this.$store
时出现编译错误。我已经为商店添加了一个定义文件:
// vuex.d.ts
import { ComponentCustomProperties } from 'vue'
import { Store } from 'vuex'
declare module '@vue/runtime-core' {
// declare your own store states
interface State {
count: number;
}
// provide typings for `this.$store`
interface ComponentCustomProperties {
$store: Store<State>;
}
}
而 vs-code 似乎正在阅读它,因为它提供了智能感知或它。 chrome 控制台记录了我能看到的内容。但它看起来不像编译器读取定义文件,因为它在浏览器中显示以下错误。
Failed to compile.
src/views/Tab1.vue:28:22 TS2339: Property '$store' does not exist on type '{ name: string; components: { ExploreContainer: { name: >string; props: { name: StringConstructor; }; }; IonHeader: DefineComponent<IonHeader & InputProps, >object, ... 9 more ..., {}>; IonToolbar: DefineComponent<...>; IonTitle: DefineComponent<...>; >IonContent: DefineComponent<...>; IonPage: DefineComponent<...>; };...'. 26 | components: { ExploreContainer, IonHeader, IonToolbar, IonTitle, IonContent, IonPage }, 27 | mounted() {
28 | console.log(this.$store); | ^^^^^^ 29 | } 30 | } 31 |
您可以浏览此存储库中的代码:https://github.com/kebarvid/notifier
为了让它为你工作,你需要命名 vuex 声明文件 shims-vuex.d.ts
并在其中导入你的商店实例:
import { ComponentCustomProperties } from 'vue'
import store from '@/store'
interface State {
count: number;
}
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$store: store;
}
}
自己找到了答案。
我没有将我的组件包装在 defineComponent
函数中,如果我将 Tab1.bue 中的脚本部分从
<script lang="ts">
import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
import ExploreContainer from '@/components/ExploreContainer.vue';
export default {
name: 'Tab1',
components: { ExploreContainer, IonHeader, IonToolbar, IonTitle, IonContent, IonPage },
mounted() {
console.log(this.$store);
}
}
</script>
以下
<script lang="ts">
import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
import ExploreContainer from '@/components/ExploreContainer.vue';
import { defineComponent } from 'vue';
export default defineComponent( {
name: 'Tab1',
components: { ExploreContainer, IonHeader, IonToolbar, IonTitle, IonContent, IonPage },
mounted() {
console.log(this.$store);
}
})
</script>
我没有得到编译错误。有点奇怪的是,当您使用 CLI 创建新应用程序时,默认情况下不会这样做,因为 ionic 希望您使用 TypeScript。