这里是typescript + redux生态系统的新手。在typescript中使用redux-actions,redux-thunk和redux-promise-middleware
在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.
}
由于我使用的终极版,承诺中间件,动作LOGIN_PENDING
,LOGIN_FULFILLED
/LOGIN_REJECTED
自动调度。我如何为这些创建类型,使reducer可以找出它正在处理的操作对象?
由于还原操作遵循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
类型。
这就是问题所在。什么是'AuthActions',这样每个case块就知道'action'来自哪个接口。为了清晰起见,我编辑了这个问题。 –
然后它的LoginActions联盟键入我上面的答案。 Iv'e通读中间件的.d.ts文件,我可以看到它的任何泛型。所以这意味着你必须像我一样定义它们,并在缩减器中导入union类型。 –