Skip to content

Commit e519a14

Browse files
committed
add types for typed hook results
1 parent c5d5335 commit e519a14

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

packages/toolkit/src/query/react/buildHooks.ts

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import { useStableQueryArgs } from './useSerializedStableValue'
5252
import type { UninitializedValue } from './constants'
5353
import { UNINITIALIZED_VALUE } from './constants'
5454
import { useShallowStableValue } from './useShallowStableValue'
55+
import { BaseQueryFn } from '../baseQueryTypes'
5556

5657
// Copy-pasted from React-Redux
5758
export const useIsomorphicLayoutEffect =
@@ -97,7 +98,22 @@ export type UseQuery<D extends QueryDefinition<any, any, any, any>> = <
9798
>(
9899
arg: QueryArgFrom<D> | SkipToken,
99100
options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>
100-
) => UseQueryStateResult<D, R> & ReturnType<UseQuerySubscription<D>>
101+
) => UseQueryHookResult<D, R>
102+
103+
export type UseQueryHookResult<
104+
D extends QueryDefinition<any, any, any, any>,
105+
R = UseQueryStateDefaultResult<D>
106+
> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>
107+
108+
export type TypedUseQueryHookResult<
109+
ResultType,
110+
QueryArg,
111+
BaseQuery extends BaseQueryFn,
112+
R = UseQueryStateDefaultResult<
113+
QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
114+
>
115+
> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> &
116+
TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>
101117

102118
interface UseQuerySubscriptionOptions extends SubscriptionOptions {
103119
/**
@@ -162,7 +178,19 @@ export type UseQuerySubscription<
162178
> = (
163179
arg: QueryArgFrom<D> | SkipToken,
164180
options?: UseQuerySubscriptionOptions
165-
) => Pick<QueryActionCreatorResult<D>, 'refetch'>
181+
) => UseQuerySubscriptionResult<D>
182+
183+
export type UseQuerySubscriptionResult<
184+
D extends QueryDefinition<any, any, any, any>
185+
> = Pick<QueryActionCreatorResult<D>, 'refetch'>
186+
187+
export type TypedUseQuerySubscriptionResult<
188+
ResultType,
189+
QueryArg,
190+
BaseQuery extends BaseQueryFn
191+
> = UseQuerySubscriptionResult<
192+
QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
193+
>
166194

167195
export type UseLazyQueryLastPromiseInfo<
168196
D extends QueryDefinition<any, any, any, any>
@@ -338,6 +366,15 @@ export type UseQueryStateResult<
338366
R
339367
> = NoInfer<R>
340368

369+
export type TypedUseQueryStateResult<
370+
ResultType,
371+
QueryArg,
372+
BaseQuery extends BaseQueryFn,
373+
R = UseQueryStateDefaultResult<
374+
QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
375+
>
376+
> = NoInfer<R>
377+
341378
type UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> =
342379
QuerySubState<D> & {
343380
/**
@@ -435,6 +472,18 @@ export type UseMutationStateResult<
435472
reset: () => void
436473
}
437474

475+
export type TypedUseMutationResult<
476+
ResultType,
477+
QueryArg,
478+
BaseQuery extends BaseQueryFn,
479+
R = MutationResultSelectorResult<
480+
MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>
481+
>
482+
> = UseMutationStateResult<
483+
MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>,
484+
R
485+
>
486+
438487
/**
439488
* A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.
440489
*

packages/toolkit/src/query/react/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,10 @@ const createApi = /* @__PURE__ */ buildCreateApi(
2121
reactHooksModule()
2222
)
2323

24+
export type {
25+
TypedUseQueryHookResult,
26+
TypedUseQueryStateResult,
27+
TypedUseQuerySubscriptionResult,
28+
TypedUseMutationResult,
29+
} from './buildHooks'
2430
export { createApi, reactHooksModule }

0 commit comments

Comments
 (0)