Skip to content

Commit

Permalink
feature(useQueries): reject void or undefined as query function retur…
Browse files Browse the repository at this point in the history
…n type
  • Loading branch information
yss14 committed Apr 22, 2022
1 parent ca70f08 commit 201cae1
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/core/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ export type QueryFunction<
> = (
context: QueryFunctionContext<TQueryKey>
) => [T] extends [undefined]
? never
? never | 'queryFn must not return undefined or void'
: [T] extends [void]
? never
? never | 'queryFn must not return undefined or void'
: T | Promise<T>

export interface QueryFunctionContext<
Expand Down
12 changes: 10 additions & 2 deletions src/reactjs/useQueries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ type UseQueryOptionsForUseQueries<
TQueryKey extends QueryKey = QueryKey
> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'context'>

type InvalidQueryFn = QueryFunction<
undefined | Promise<undefined> | void | Promise<void>
>

// Avoid TS depth-limit error in case of large array literal
type MAXIMUM_DEPTH = 20

Expand All @@ -40,7 +44,9 @@ type GetOptions<T> =
: T extends [infer TQueryFnData]
? UseQueryOptionsForUseQueries<TQueryFnData>
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
T extends {
T extends { queryFn?: InvalidQueryFn }
? never | 'queryFn must not return undefined or void'
: T extends {
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
select: (data: any) => infer TData
}
Expand Down Expand Up @@ -100,7 +106,9 @@ export type QueriesOptions<
? T
: // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
// use this to infer the param types in the case of Array.map() argument
T extends UseQueryOptionsForUseQueries<
T extends { queryFn: InvalidQueryFn }[]
? (never | 'queryFn must not return undefined or void')[]
: T extends UseQueryOptionsForUseQueries<
infer TQueryFnData,
infer TError,
infer TData,
Expand Down

0 comments on commit 201cae1

Please sign in to comment.