这里是 typescript + redux 生态系统的新手。
在 TypeScript 中使用 redux-actions、redux-thunk 和 redux-promise-middleware 时,如何将类型信息正确封装到异步操作中?
身份验证示例:
/* actions */
const login = createAction(LOGIN, authService.login);
/* authService */
async function login(payload: LoginPayload): Promise<LoginResponse> {
// ... authenticate here.
}
由于我使用的是 redux-promise-middleware,因此会自动分派actions LOGIN_PENDING
,LOGIN_FULFILLED
/ 。LOGIN_REJECTED
我如何为这些创建类型,以便减速器可以找出它正在处理的操作对象?
由于 redux-actions 遵循 FSA,_FULFILLED
所以应该有action.payload
. _REJECTED
应该有action.error
/* reducer */
function loginReducer(state: AppState, action: AuthAction) {
switch (action.type) {
case LOGIN_FULFILLED:
// action.payload should be defined as LoginResponse object here.
// action.error shouldnt be present.
case LOGIN_REJECTED:
// action.error should be defined
}
}
我将如何创建AuthAction
类型?我猜它应该是每个单独动作类型的联合类型(可以是它们自己的联合类型)。redux-actions
也为此提供Action
和BaseAction
类型。