首页 > 解决方案 > 无法在 createAsyncThunk 中将 getState 类型设置为 RootState

问题描述

我无法将返回类型设置getState()RootState。我正在使用打字稿和 VSCode。我必须将类型设置为any,这会停止该对象上的 IntelliSense。下面是有问题的代码:

export const unsubscribeMeta = createAsyncThunk(
  'meta/unsubscribe',
  async (_, { getState }) => {
    const { meta } = getState() as any;
    const res = await client.post<apiUnsubscribeResponse>(
      `/meta/unsubscribe/${meta.subscriptionId}`
    );
    return res.data.data;
  }
);

如果我尝试使用RootState而不是any,VSCode 在模块中标记了许多错误。我相信这是由于商店和这个切片的循环依赖。我RootState在模块中的许多地方都在使用选择器,没有问题。有没有解决的办法?

标签: reactjstypescriptreduxredux-thunkredux-toolkit

解决方案


您实际上并不需要了解整个州的形状。您只需要知道您尝试访问的值是否存在。

如果您可以访问整个state.meta类型:

const { meta } = getState() as { meta: MetaState };

如果不:

const { meta } = getState() as { meta: { subscriptionId: string } };

我推荐这种避免循环依赖的方法,因为根状态总是依赖于切片,所以切片不应该依赖于根。


推荐阅读