如何将使用 typesafe-actions createAsyncAction 创建的操作传递给生成具有正确类型的 redux-observable epics 的函数?
How to pass actions created with typesafe-actions createAsyncAction to a function that generates redux-observable epics with the correct types?
我在思考如何在保留输入信息的同时传递通过 CreateAsyncAction 创建的 AsyncAction 时遇到了一些麻烦,例如在我的例子中,我正在尝试使用 ApolloClient 创建一个通用的 GraphQL 查询史诗,因为所有这些将具有相同的 REQUEST/SUCCESS/FAILURE 流程:
asyncAction 应该是什么类型才能正确解析 isActionOf 和 action.Payload?
const createAsyncEpic = (asyncAction: <type?>, mutation: any) {
const epic: Epic<RootAction, RootState> = (action$, state$) =>
action$.pipe(
filter(isActionOf(actions.request)),
withLatestFrom(state$),
mergeMap(([action, state]) =>
client
.mutate({ mutation, variables: { ...action.payload } })
.then((result: ApolloQueryResult<P2>) => {
return actions.success(result.data);
})
.catch((error: ApolloError) => {
return actions.failure(error);
})
)
);
return epic;
};
谢谢!
在 typesafe-actions@4.3.0
中,我们添加了对使用 AsyncActionCreator
类型为异步操作创建显式类型的支持。
这是文档:https://github.com/piotrwitek/typesafe-actions#asyncactioncreator
在您的情况下,您可以尝试使用类似这样的方法从传递的异步操作 arg 中推断类型:
const createAsyncEpic = <TRequestType extends string, TRequestPayload, TSuccessType extends string, TSuccessPayload, TFailureType extends string, TFailurePayload>(
asyncAction: AsyncActionCreator<
[TRequestType, TRequestPayload],
[TSuccessType, TSuccessPayload],
[TFailureType, TFailurePayload],
>,
mutation: any
) {
...
我在思考如何在保留输入信息的同时传递通过 CreateAsyncAction 创建的 AsyncAction 时遇到了一些麻烦,例如在我的例子中,我正在尝试使用 ApolloClient 创建一个通用的 GraphQL 查询史诗,因为所有这些将具有相同的 REQUEST/SUCCESS/FAILURE 流程:
asyncAction 应该是什么类型才能正确解析 isActionOf 和 action.Payload?
const createAsyncEpic = (asyncAction: <type?>, mutation: any) {
const epic: Epic<RootAction, RootState> = (action$, state$) =>
action$.pipe(
filter(isActionOf(actions.request)),
withLatestFrom(state$),
mergeMap(([action, state]) =>
client
.mutate({ mutation, variables: { ...action.payload } })
.then((result: ApolloQueryResult<P2>) => {
return actions.success(result.data);
})
.catch((error: ApolloError) => {
return actions.failure(error);
})
)
);
return epic;
};
谢谢!
在 typesafe-actions@4.3.0
中,我们添加了对使用 AsyncActionCreator
类型为异步操作创建显式类型的支持。
这是文档:https://github.com/piotrwitek/typesafe-actions#asyncactioncreator
在您的情况下,您可以尝试使用类似这样的方法从传递的异步操作 arg 中推断类型:
const createAsyncEpic = <TRequestType extends string, TRequestPayload, TSuccessType extends string, TSuccessPayload, TFailureType extends string, TFailurePayload>(
asyncAction: AsyncActionCreator<
[TRequestType, TRequestPayload],
[TSuccessType, TSuccessPayload],
[TFailureType, TFailurePayload],
>,
mutation: any
) {
...