Description
openapi-react-query version
0.5.0
Description
The current implementation of error typing in useQuery
, useMutation
, and similar hooks only types the Response["error"]
field returned by openapi-fetch
. However, this does not account for:
fetch
-level errors (e.g. network errors)- Errors thrown by custom middlewares
- Other runtime exceptions
As a result, the type assigned to the error
field in React Query hooks is incomplete and potentially misleading, as consumers might assume that all thrown errors conform to Response["error"]
. This typing issue can lead to subtle runtime bugs and TypeScript's false sense of safety. The type should be widened to reflect real-world thrown values.
Reproduction
Consider the following usage:
const { error } = useQueryClient.useQuery("get", "/some-endpoint");
if (error) {
// TS assumes `error` is `Response["error"]`, e.g. an API error
console.error(error);
}
But error
could be any of the following:
- A error thrown by the
fetch()
call (e.g. network failure) - A custom error thrown by a user-defined middleware
- ...
Yet, the generic types currently look like this:
UseQueryResult<TData, Response["error"]>
And Response["error"]
is tied to what openapi-fetch
returns — not all the above.
Expected result
React Query's error
field should allow for a broader type to reflect all possible thrown errors.
We suggest modifying the generics to include unknown
or Error
union:
UseQueryResult<TData, Response["error"] | Error>
Or even more accurately:
UseQueryResult<TData, unknown>
This would better reflect the reality that many non-API errors can be thrown during the request lifecycle.
Proposed Fix
Update all references to the error
field in the generics to broaden its type. For example:
UseQueryResult<..., unknown>
UseMutationResult<..., unknown, ...>
Alternatively, provide a customization hook or override so downstream users can define their own union error type.
Extra
- I’m willing to open a PR (see CONTRIBUTING.md)