- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试输入检查我的 redux-thunk
使用 Typescript 编写代码。
来自 Redux 的官方文档:Usage with Redux Thunk ,我们得到这个例子:
// src/thunks.ts
import { Action } from 'redux'
import { sendMessage } from './store/chat/actions'
import { RootState } from './store'
import { ThunkAction } from 'redux-thunk'
export const thunkSendMessage = (
message: string
): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {
const asyncResp = await exampleAPI()
dispatch(
sendMessage({
message,
user: asyncResp,
timestamp: new Date().getTime()
})
)
}
function exampleAPI() {
return Promise.resolve('Async Chat Bot')
}
为了减少重复,您可能希望在您的商店文件中定义一次可重用的 AppThunk 类型,然后在编写 thunk 时使用该类型:
export type AppThunk<ReturnType = void> = ThunkAction<
ReturnType,
RootState,
unknown,
Action<string>
>
问题
ThunkAction
的用法类型:
ThunkAction<void, RootState, unknown, Action<string>>
有 4 个类型参数,对吧?
void
这是 thunk 的返回类型,对吧?不应该是
Promise<void>
, 因为它是
async
?
RootState
这是完整的状态形状,对吧?我的意思是,它不是切片,而是完整的状态。
unknown
这是为什么
unknown
?这是什么?
Action<string>
这个也不懂。为什么是
Action<T>
将字符串作为参数?应该总是
string
?为什么?
最佳答案
来自 https://github.com/reduxjs/redux-thunk/blob/d28ab03fd1d2dd1de402928a9589857e97142e09/src/index.d.ts 的打字
/**
* A "thunk" action (a callback function that can be dispatched to the Redux
* store.)
*
* Also known as the "thunk inner function", when used with the typical pattern
* of an action creator function that returns a thunk action.
*
* @template TReturnType The return type of the thunk's inner function
* @template TState The redux state
* @template TExtraThunkARg Optional extra argument passed to the inner function
* (if specified when setting up the Thunk middleware)
* @template TBasicAction The (non-thunk) actions that can be dispatched.
*/
export type ThunkAction<
TReturnType,
TState,
TExtraThunkArg,
TBasicAction extends Action
> = (
dispatch: ThunkDispatch<TState, TExtraThunkArg, TBasicAction>,
getState: () => TState,
extraArgument: TExtraThunkArg,
) => TReturnType;
第一 -
TReturnType
type
属性是一个普通字符串。您可以选择提供自己的更具体的类型 - 即
type MyActionType = 'FOO_ACTION' | 'BAR_ACTION'
进一步类型安全/缩小。然后您将使用它作为操作。
关于typescript - 如何在 Typescript 中使用 redux-thunk 使用 ThunkAction 正确键入 thunk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63881398/
我已经使用 typescript 设置了一个 redux thunk 函数,如下所示: export const fetchActivities = (): AppThunk => async dis
我在使用 Typescript 调度 redux-thunk 操作时遇到问题。 import { AnyAction, applyMiddleware, createStore } from 'red
我正在尝试输入检查我的 redux-thunk使用 Typescript 编写代码。 来自 Redux 的官方文档:Usage with Redux Thunk ,我们得到这个例子: // src/t
假设我有这样的代码: import { Action, Dispatch } from 'redux'; import { ThunkAction } from 'redux-thunk'; inte
我是一名优秀的程序员,十分优秀!