typescript - 如何输入 Redux-Toolkit createListenerMiddleware 监听器条目

标签 typescript redux middleware redux-toolkit

我一直在集成 redux-toolkit createListenerMiddleware最近,但我现在有点陷入困境。我正在尝试输入一些“监听器条目”,但似乎无法管理它。智能感知对我来说没有意义,我在文档或网上找不到任何与此相关的示例。目标是输入 listenerApi 参数,以便我可以使用 getState() 函数,而无需进行任何类型转换。

有什么简单的方法可以实现这一点吗?

任何帮助将不胜感激。

listenerMiddleware.startListening({
  actionCreator: toggleSomething, // Action generator from reducer createSlice
  effect: async (
    action: AnyAction,
    listenerApi: ListenerEffectAPI<AppState, Dispatch> // Trying to type this in some way :[
  ): Promise<void> => {
    const state = (await listenerApi.getState()) as AppState; // TODO: type this better
  },
});

最佳答案

startListening 旨在尽可能推断正确的 TS 类型。

假设您的操作创建者 ( toggleSomething ) 输入正确(如果您遵循 our RTK TS usage guidelines ,则应该如此),startListening 将正确推断出effect 回调中的 action

剩下的是getState的类型。 RTK 和 TS 无法提前知道这一点,因为中间件会添加到存储中。这就是为什么我们设计 API 来让您创建应用了正确状态类型的 startListening 的“预输入”版本,如此处的 API 文档所示:

示例:

// listenerMiddleware.ts
import { createListenerMiddleware, addListener } from '@reduxjs/toolkit'
import type { TypedStartListening, TypedAddListener } from '@reduxjs/toolkit'

import type { RootState, AppDispatch } from './store'

export const listenerMiddleware = createListenerMiddleware()

export type AppStartListening = TypedStartListening<RootState, AppDispatch>

export const startAppListening =
  listenerMiddleware.startListening as AppStartListening

export const addAppListener = addListener as TypedAddListener<
  RootState,
  AppDispatch
>

关于typescript - 如何输入 Redux-Toolkit createListenerMiddleware 监听器条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74814209/

相关文章:

typescript - 为什么我必须使用 "new BrowserWindow"而不是 "new Electron.BrowserWindow"实例化 Electron.BrowserWindow ?

reactjs - 为什么 React 应用程序在 Heroku 上会占用大量内存?

javascript - react redux 中组件和容器的区别

backbone.js - 如何设置 Express 以与 Backbone 和 pushState 一起使用?

php - Middleware Slim PHP Framework 中如何响应

typescript - 可以为 null 或未定义的属性导致 "does not exist"错误

javascript - 更改客户端编程语言中的键盘语言

javascript - 从 Redux 中导出值(value),使其全局化

javascript - Object.Assign 不创建新实例

.net - Connect 和 WSGI 做的事情完全相同吗? .NET 有类似的项目吗?