From 0cdf5e88b7e38239be5ff277c1094b353ed3e808 Mon Sep 17 00:00:00 2001 From: Matt Sutkowski Date: Sat, 6 Nov 2021 10:44:59 -0700 Subject: [PATCH] Fix types for lazy query :fingers_crossed: --- .../toolkit/src/query/core/buildInitiate.ts | 27 +++++++++++++++++-- .../toolkit/src/query/react/buildHooks.ts | 9 ++++--- .../src/query/tests/buildHooks.test.tsx | 3 --- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/packages/toolkit/src/query/core/buildInitiate.ts b/packages/toolkit/src/query/core/buildInitiate.ts index 31c5cc7e6b..85bc8ab1d1 100644 --- a/packages/toolkit/src/query/core/buildInitiate.ts +++ b/packages/toolkit/src/query/core/buildInitiate.ts @@ -45,9 +45,9 @@ type StartQueryActionCreator< options?: StartQueryActionCreatorOptions ) => ThunkAction, any, any, AnyAction> -export type QueryActionCreatorResult< +type CommonQueryActionCreatorResult< D extends QueryDefinition -> = Promise> & { +> = { arg: QueryArgFrom requestId: string subscriptionOptions: SubscriptionOptions | undefined @@ -58,6 +58,29 @@ export type QueryActionCreatorResult< updateSubscriptionOptions(options: SubscriptionOptions): void } +export type QueryActionCreatorResult< + D extends QueryDefinition +> = Promise> & CommonQueryActionCreatorResult + +export type LazyQueryActionCreatorResult< + D extends QueryDefinition +> = Promise< + | { data: ResultTypeFrom } + | { + error: + | Exclude< + BaseQueryError< + D extends QueryDefinition + ? BaseQuery + : never + >, + undefined + > + | SerializedError + } +> & + CommonQueryActionCreatorResult + type StartMutationActionCreator< D extends MutationDefinition > = ( diff --git a/packages/toolkit/src/query/react/buildHooks.ts b/packages/toolkit/src/query/react/buildHooks.ts index dd4a7c8892..bcb6a11be3 100644 --- a/packages/toolkit/src/query/react/buildHooks.ts +++ b/packages/toolkit/src/query/react/buildHooks.ts @@ -31,6 +31,7 @@ import type { import type { QueryActionCreatorResult, MutationActionCreatorResult, + LazyQueryActionCreatorResult, } from '@reduxjs/toolkit/dist/query/core/buildInitiate' import type { SerializeQueryArgs } from '@reduxjs/toolkit/dist/query/defaultSerializeQueryArgs' import { shallowEqual } from 'react-redux' @@ -220,7 +221,7 @@ export type LazyQueryTrigger> = { ( arg: QueryArgFrom, preferCacheValue?: boolean - ): QueryActionCreatorResult + ): LazyQueryActionCreatorResult } /** @@ -670,7 +671,7 @@ export function buildHooks({ const dispatch = useDispatch>() const [arg, setArg] = useState(UNINITIALIZED_VALUE) - const promiseRef = useRef | undefined>() + const promiseRef = useRef | undefined>() const stableSubscriptionOptions = useShallowStableValue({ refetchOnReconnect, @@ -695,7 +696,7 @@ export function buildHooks({ const trigger = useCallback( function (arg: any, preferCacheValue = false) { - let promise: QueryActionCreatorResult + let promise: LazyQueryActionCreatorResult batch(() => { promiseRef.current?.unsubscribe() @@ -705,7 +706,7 @@ export function buildHooks({ subscriptionOptions: subscriptionOptionsRef.current, forceRefetch: !preferCacheValue, }) - ) + ) as any setArg(arg) }) diff --git a/packages/toolkit/src/query/tests/buildHooks.test.tsx b/packages/toolkit/src/query/tests/buildHooks.test.tsx index fc2c455f17..14c5bf70ed 100644 --- a/packages/toolkit/src/query/tests/buildHooks.test.tsx +++ b/packages/toolkit/src/query/tests/buildHooks.test.tsx @@ -791,9 +791,6 @@ describe('hooks tests', () => { | { error: { status: number; data: unknown } | SerializedError } - | { - data: undefined - } | { data: { name: string