diff --git a/packages/toolkit/src/query/react/buildHooks.ts b/packages/toolkit/src/query/react/buildHooks.ts index 15e2977937..538279d85b 100644 --- a/packages/toolkit/src/query/react/buildHooks.ts +++ b/packages/toolkit/src/query/react/buildHooks.ts @@ -52,6 +52,7 @@ import { useStableQueryArgs } from './useSerializedStableValue' import type { UninitializedValue } from './constants' import { UNINITIALIZED_VALUE } from './constants' import { useShallowStableValue } from './useShallowStableValue' +import { BaseQueryFn } from '../baseQueryTypes' // Copy-pasted from React-Redux export const useIsomorphicLayoutEffect = @@ -97,7 +98,22 @@ export type UseQuery> = < >( arg: QueryArgFrom | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions -) => UseQueryStateResult & ReturnType> +) => UseQueryHookResult + +export type UseQueryHookResult< + D extends QueryDefinition, + R = UseQueryStateDefaultResult +> = UseQueryStateResult & UseQuerySubscriptionResult + +export type TypedUseQueryHookResult< + ResultType, + QueryArg, + BaseQuery extends BaseQueryFn, + R = UseQueryStateDefaultResult< + QueryDefinition + > +> = TypedUseQueryStateResult & + TypedUseQuerySubscriptionResult interface UseQuerySubscriptionOptions extends SubscriptionOptions { /** @@ -162,7 +178,19 @@ export type UseQuerySubscription< > = ( arg: QueryArgFrom | SkipToken, options?: UseQuerySubscriptionOptions -) => Pick, 'refetch'> +) => UseQuerySubscriptionResult + +export type UseQuerySubscriptionResult< + D extends QueryDefinition +> = Pick, 'refetch'> + +export type TypedUseQuerySubscriptionResult< + ResultType, + QueryArg, + BaseQuery extends BaseQueryFn +> = UseQuerySubscriptionResult< + QueryDefinition +> export type UseLazyQueryLastPromiseInfo< D extends QueryDefinition @@ -338,6 +366,15 @@ export type UseQueryStateResult< R > = NoInfer +export type TypedUseQueryStateResult< + ResultType, + QueryArg, + BaseQuery extends BaseQueryFn, + R = UseQueryStateDefaultResult< + QueryDefinition + > +> = NoInfer + type UseQueryStateBaseResult> = QuerySubState & { /** @@ -435,6 +472,18 @@ export type UseMutationStateResult< reset: () => void } +export type TypedUseMutationResult< + ResultType, + QueryArg, + BaseQuery extends BaseQueryFn, + R = MutationResultSelectorResult< + MutationDefinition + > +> = UseMutationStateResult< + MutationDefinition, + R +> + /** * 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. * diff --git a/packages/toolkit/src/query/react/index.ts b/packages/toolkit/src/query/react/index.ts index aaaf881c63..f06beebefd 100644 --- a/packages/toolkit/src/query/react/index.ts +++ b/packages/toolkit/src/query/react/index.ts @@ -21,4 +21,10 @@ const createApi = /* @__PURE__ */ buildCreateApi( reactHooksModule() ) +export type { + TypedUseQueryHookResult, + TypedUseQueryStateResult, + TypedUseQuerySubscriptionResult, + TypedUseMutationResult, +} from './buildHooks' export { createApi, reactHooksModule }