diff --git a/packages/openapi-react-query/src/index.ts b/packages/openapi-react-query/src/index.ts index 337919ac3..23c996c53 100644 --- a/packages/openapi-react-query/src/index.ts +++ b/packages/openapi-react-query/src/index.ts @@ -156,13 +156,16 @@ export type UseMutationMethod, Init extends MaybeOptionalInit, Response extends Required>, // note: Required is used to avoid repeating NonNullable in UseQuery types - Options extends Omit, "mutationKey" | "mutationFn">, + TOnMutateResult = unknown, >( method: Method, url: Path, - options?: Options, + options?: Omit< + UseMutationOptions, + "mutationKey" | "mutationFn" + >, queryClient?: QueryClient, -) => UseMutationResult; +) => UseMutationResult; export interface OpenapiQueryClient { queryOptions: QueryOptionsFunction; diff --git a/packages/openapi-react-query/test/index.test.tsx b/packages/openapi-react-query/test/index.test.tsx index 4dcca2eee..b9978935c 100644 --- a/packages/openapi-react-query/test/index.test.tsx +++ b/packages/openapi-react-query/test/index.test.tsx @@ -792,6 +792,30 @@ describe("client", () => { await waitFor(() => rendered.findByText("data: Hello, status: success")); }); + + it("should type mutate results properly", async () => { + const fetchClient = createFetchClient({ baseUrl }); + const client = createClient(fetchClient); + + const onMutateReturnValue = { someArray: [1, 2, 3], someString: "abc" }; + type expectedOnMutateResultType = typeof onMutateReturnValue | undefined; + + const result = renderHook( + () => + client.useMutation("put", "/comment", { + onMutate: () => onMutateReturnValue, + onError: (err, _, onMutateResult, context) => { + assertType(onMutateResult); + }, + onSettled: (_data, _error, _variables, onMutateResult, context) => { + assertType(onMutateResult); + }, + }), + { wrapper }, + ); + + assertType(result.result.current.context); + }); }); describe("mutateAsync", () => {