Как обработать возвратный тип отправки с Redux Promise Middleware?
Redux Promise Middleware, кажется, обрабатывает обещание разрешения полезной нагрузки действия. Например, рассмотрим этот создатель действий, который использует Promise
в качестве полезной нагрузки:
export default class ActionCreators {
public static fetchAllUsers(): FetchAction {
return {
type: actionTypes.FETCH_ALL_USERS,
payload: fetch("api.com/users")
};
}
}
При использовании этого создателя действий TypeScript ожидает Action
возвращенные данные, а не Promise
это на самом деле возвращается из-за избыточного промежуточного программного обеспечения.
Таким образом, следующий код не будет компилироваться, потому что Property 'then' does not exist on type 'Action'.
dispatch(ActionCreators.fetchAllUsers())
.then(response => {
// do something with response
})
Typescript ожидает возвращаемые свойства, такие как payload
а также type
, которые на самом деле не возвращаются, потому что обещание уже выполнено и действительно возвращено.
.then
готов к использованию, но машинопись не скомпилируется, потому что ожидает чего-то другого.
Я предполагаю, что вопрос заключается в следующем: как написать правильную типизацию для обработки действий избыточности-обещания-промежуточного программного обеспечения, обеспечивая при этом избыточность connect
-функция с правильными типами отправки для mapDispatchToProps
и т.п.
1 ответ
Вы можете использовать условные типы. Например
export interface BaseAction<TPayload> {
type: string;
payload: TPayload;
}
export interface Dispatch {
<T extends BaseAction<any>>(action: T):
T extends BaseAction<Promise<infer R>> ? Promise<R>: T
}