Skip to content

useQuery silently accepts queryOptions in the options parameter without type error #2642

@josephmcg

Description

@josephmcg

openapi-react-query version

0.5.1

Description

When calling $api.useQuery, it's possible to accidentally pass React Query options (retry, refetchInterval, refetchOnMount, etc.) as the 3rd argument (options) instead of the 4th argument (queryOptions). TypeScript does not flag this, and at runtime the options are silently ignored.

This applies to endpoints that don't have options parameters defined in the schema.

Reproduction

// schema
export interface paths {
    "/me": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get: operations["get_user"];
        put: operations["update_user"];
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
}

export interface operations {
    get_user: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            // ...
        };
    };
import createClient from "openapi-react-query";
import createFetchClient from "openapi-fetch";

const fetchClient = createFetchClient<paths>({ baseUrl: "https://api.example.com" });
const $api = createClient(fetchClient);

// No type error — but `refetchOnMount` and `retry` are silently swallowed
// by the fetch client and never reach React Query
const query = $api.useQuery("get", "/me", {
  retry: false,
  refetchOnMount: false,
});

// Correct usage (options in 4th arg):
const query = $api.useQuery("get", "/me", undefined, {
  retry: false,
  refetchOnMount: false,
});

Expected result

Passing queryOptions as the third param should raise a type error

Extra

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingopenapi-react-queryRelevant to openapi-react-query

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions