Skip to content

Commit ff23771

Browse files
CO0Ki3독고현markerikson
authored
fix(types): ensure non-undefined data on isSuccess with exactOptionalPropertyTypes (#5088)
* fix(types): ensure non-undefined `data` on isSuccess with exactOptionalPropertyTypes * Refactor UseQueryStateDefaultResult into separate types for readability --------- Co-authored-by: 독고현 <[email protected]> Co-authored-by: Mark Erikson <[email protected]>
1 parent eeaa35b commit ff23771

File tree

1 file changed

+50
-31
lines changed

1 file changed

+50
-31
lines changed

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

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -718,39 +718,58 @@ type UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> =
718718
isError: false
719719
}
720720

721+
type UseQueryStateUninitialized<D extends QueryDefinition<any, any, any, any>> =
722+
TSHelpersOverride<
723+
Extract<UseQueryStateBaseResult<D>, { status: QueryStatus.uninitialized }>,
724+
{ isUninitialized: true }
725+
>
726+
727+
type UseQueryStateLoading<D extends QueryDefinition<any, any, any, any>> =
728+
TSHelpersOverride<
729+
UseQueryStateBaseResult<D>,
730+
{ isLoading: true; isFetching: boolean; data: undefined }
731+
>
732+
733+
type UseQueryStateSuccessFetching<
734+
D extends QueryDefinition<any, any, any, any>,
735+
> = TSHelpersOverride<
736+
UseQueryStateBaseResult<D>,
737+
{
738+
isSuccess: true
739+
isFetching: true
740+
error: undefined
741+
} & {
742+
data: ResultTypeFrom<D>
743+
} & Required<Pick<UseQueryStateBaseResult<D>, 'fulfilledTimeStamp'>>
744+
>
745+
746+
type UseQueryStateSuccessNotFetching<
747+
D extends QueryDefinition<any, any, any, any>,
748+
> = TSHelpersOverride<
749+
UseQueryStateBaseResult<D>,
750+
{
751+
isSuccess: true
752+
isFetching: false
753+
error: undefined
754+
} & {
755+
data: ResultTypeFrom<D>
756+
currentData: ResultTypeFrom<D>
757+
} & Required<Pick<UseQueryStateBaseResult<D>, 'fulfilledTimeStamp'>>
758+
>
759+
760+
type UseQueryStateError<D extends QueryDefinition<any, any, any, any>> =
761+
TSHelpersOverride<
762+
UseQueryStateBaseResult<D>,
763+
{ isError: true } & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>
764+
>
765+
721766
type UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> =
722767
TSHelpersId<
723-
| TSHelpersOverride<
724-
Extract<
725-
UseQueryStateBaseResult<D>,
726-
{ status: QueryStatus.uninitialized }
727-
>,
728-
{ isUninitialized: true }
729-
>
730-
| TSHelpersOverride<
731-
UseQueryStateBaseResult<D>,
732-
| { isLoading: true; isFetching: boolean; data: undefined }
733-
| ({
734-
isSuccess: true
735-
isFetching: true
736-
error: undefined
737-
} & Required<
738-
Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>
739-
>)
740-
| ({
741-
isSuccess: true
742-
isFetching: false
743-
error: undefined
744-
} & Required<
745-
Pick<
746-
UseQueryStateBaseResult<D>,
747-
'data' | 'fulfilledTimeStamp' | 'currentData'
748-
>
749-
>)
750-
| ({ isError: true } & Required<
751-
Pick<UseQueryStateBaseResult<D>, 'error'>
752-
>)
753-
>
768+
| UseQueryStateUninitialized<D>
769+
| UseQueryStateLoading<D>
770+
| UseQueryStateSuccessFetching<D>
771+
| UseQueryStateSuccessNotFetching<D>
772+
| UseQueryStateError<D>
754773
> & {
755774
/**
756775
* @deprecated Included for completeness, but discouraged.

0 commit comments

Comments
 (0)