关于vuex中module的类型

来源:2-21 【讨论题】对 Typescript 初步学习后的印象和困惑

有没有没被占用的昵称

2021-04-14

老师,我看了你在这个问题下的回复,但是如果按照这个方法来的话,是不是也就意味着,不能在根state下定义变量了呀。
老师我是这么写的,如果不在根state下定义是没问题的,可能是因为用了InjectionKey的原因吧。如果在RootState下定义app,跟state就会报错,因为没有定义app。是不是不能共存呀

// store/index.ts

import { InjectionKey } from 'vue’
import { createStore, useStore as baseUseStore, Store } from 'vuex’
import app from ‘./modules/app’

export interface RootState {
name: string;
age: number;
}

export const key: InjectionKey<Store> = Symbol(‘store-key’)

const store = createStore({
state: {
name: ‘wang’,
age: 29
},
mutations: {
},
actions: {
},
modules: {
app
}
})

export default store

export function useStore () {
return baseUseStore(key)
}

// store/modules/app.ts

import { Module } from 'vuex’
import { RootState } from ‘…/index’

export interface AppState {
count: number;
}

const state: AppState = {
count: 1
}

const mutations = {
updateCount (state: AppState, num: number) {
state.count += num
}
}

export default {
namespaced: true,
state,
mutations
} as Module<AppState, RootState>

写回答

1回答

张轩

2021-04-15

同学你好 

按照之前的做法 确实不能在根 state 中定义变量,假如你想在根 state  添加变量,我研究了一下现在的做法必须要在初始化 store 的时候,泛型传入对应的 state 类型,就需要给 modules 添加默认的值,我认为这不是一个特别好的实践。目前还没有找到更好的解决方法。

0
1
有没有没被占用的昵称
嗯嗯,谢谢老师,感觉就像组件不能install一样,感觉类型这方面有待完善呀
2021-04-15
共1条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程