1

我想将模块用于应该与 typescript 一起使用的 vuex (^4.0.2) 存储。所以我就这样开始了:

import {createStore, Module} from 'vuex';


type RootState = {
  appID: string
}

type SessionState = {
  lastSeen: number
}

const session: Module<SessionState, RootState> = {
  state: () => ({ lastSeen: -Infinity })
}

const store = createStore<RootState>({
  state: () => ({appID: 'r2d2'}),
  modules: {
    session
  }
});

const s2 = store.state.session;

但这会产生这个错误:

“RootState”类型上不存在属性“会话”。

文档建议每个模块的状态都包含在商店的状态中并使用:

//@ts-ignore
console.log(store.state.session)

显示该模块已包含在内。

应该如何设置类型以正确反映状态?

4

1 回答 1

0

我发现输入的唯一“解决方案”:

import {createStore, Module} from 'vuex';

type SessionState = {
  lastSeen: number;
}

type RootState = {
  appID: string;
  session?: SessionState; // added here
}

const session: Module<SessionState, RootState> = {
  state: () => ({ lastSeen: -Infinity })
}

const store = createStore<RootState>({
  state: () => ({appID: 'r2d2'}),
  modules: {
    session
  }
});

const s2 = store.state.session; // typed as SessionState

它可以工作,但是很不方便,而且很奇怪……
我没有找到其他的。(我搜索了很多......)
欢迎任何更好的解决方案

编辑:
我认为这个问题可能会有所帮助: https ://github.com/vuejs/vuex/issues/1689

编辑2:

那么之前的链接并没有真正有用。
我找到了比上面的代码更好的解决方案:

edit3 :好吧,编辑 2,不是很好。

于 2022-02-18T21:35:46.527 回答