diff --git a/README.md b/README.md index 1b6b0c8..ac19901 100644 --- a/README.md +++ b/README.md @@ -371,3 +371,22 @@ export function useTodos(filters: TodoFilters) { }); }; ``` + + +#### Typed helpers for QueryOptions and QueryData +Use typed query options with precision: + +```ts +import type { TypedQueryData, TypedUseQueryOptions } from "@lukemorales/query-key-factory"; + +type TodosQueryData = TypedQueryData + +type TodosQueryOptions = TypedUseQueryOptions + +export function useTodos(filters: TodoFilters, options?: TodosQueryOptions) { + return useQuery({ + ...options, + ...queries.todos.list(filters) + }); +}; +``` diff --git a/src/utility-types.ts b/src/utility-types.ts index 74b604b..8823386 100644 --- a/src/utility-types.ts +++ b/src/utility-types.ts @@ -57,12 +57,17 @@ type LooseQueryOptionsStructGenerator = (...args: any[]) => LooseQueryOptionsStr export type TypedUseQueryOptions< Options extends LooseQueryOptionsStruct | LooseQueryOptionsStructGenerator, - Data = Options extends LooseQueryOptionsStructGenerator ? Awaited['queryFn']>> - : Options extends LooseQueryOptionsStruct ? Awaited> - : never, + Data = TypedQueryData, > = Options extends LooseQueryOptionsStructGenerator ? UseQueryOptions['queryFn']>>, unknown, Data, ReturnType['queryKey']> : Options extends LooseQueryOptionsStruct ? UseQueryOptions>, unknown, Data, Options['queryKey']> : never; + +export type TypedQueryData< + Options extends LooseQueryOptionsStruct | LooseQueryOptionsStructGenerator, + Data = Options extends LooseQueryOptionsStructGenerator ? Awaited['queryFn']>> + : Options extends LooseQueryOptionsStruct ? Awaited> + : never, +> = Data;