Skip to content

Allow Custom Error Types in createQueryHook for Enhanced Error Handling #2136

Open
@SSlime-s

Description

@SSlime-s

Description

Currently, createQueryHook only exposes errors defined in the OpenAPI schema. This means that if the API returns an error defined in the schema (e.g., { message: "Invalid status" }), the error property will be typed accordingly.
However, common errors like network errors thrown by the standard fetch API result in a TypeError, which createQueryHook doesn't expose directly. This discrepancy with useSWR, which would normally capture such errors, can lead to unexpected behavior.

For example:

const { data, error } = useQuery("/pet/findByStatus");
//            ^?: { message: "Invalid status" } | undefined
//                but If a network error occurs: TypeError

This limitation makes it difficult to handle different error scenarios and maintain type safety, especially when dealing with errors not defined in the schema.

Proposal

Add a FetcherError type parameter to createQueryBaseHook:

createQueryBaseHook<Paths extends {}, IMediaType extends MediaType, Prefix extends string, FetcherError = never>

This allows users to specify the error type returned by the fetcher:

createQueryHook<paths, `${string}/${string}`, "<unique-key>", Error>(client, "<unique-key>")

Resulting in:

const { data, error } = useQuery("/pet/findByStatus");
//            ^?: { message: "Invalid status" } | Error | undefined

This is also beneficial for those using custom fetchers or middleware, allowing them to type their custom errors.

Extra

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestswr-openapiRelevant to swr-openapi library

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions