@@ -18,6 +18,7 @@ import {
18
18
QueryCache ,
19
19
QueryObserverResult ,
20
20
QueriesObserver ,
21
+ QueryFunction ,
21
22
} from '../..'
22
23
23
24
describe ( 'useQueries' , ( ) => {
@@ -899,6 +900,62 @@ describe('useQueries', () => {
899
900
}
900
901
} )
901
902
903
+ it ( 'handles types for QueryFunction factory with strongly typed QueryKey' , ( ) => {
904
+ type QueryKeyA = [ 'queryA' ]
905
+ const getQueryKeyA = ( ) : QueryKeyA => [ 'queryA' ]
906
+ type GetQueryFunctionA = ( ) => QueryFunction < number , QueryKeyA >
907
+ const getQueryFunctionA : GetQueryFunctionA = ( ) => async ( ) => {
908
+ return 1
909
+ }
910
+ type SelectorA = ( data : number ) => [ number , string ]
911
+ const getSelectorA = ( ) : SelectorA => data => [ data , data . toString ( ) ]
912
+
913
+ type QueryKeyB = [ 'queryB' , string ]
914
+ const getQueryKeyB = ( id : string ) : QueryKeyB => [ 'queryB' , id ]
915
+ type GetQueryFunctionB = ( ) => QueryFunction < string , QueryKeyB >
916
+ const getQueryFunctionB : GetQueryFunctionB = ( ) => async ( ) => {
917
+ return '1'
918
+ }
919
+ type SelectorB = ( data : string ) => [ string , number ]
920
+ const getSelectorB = ( ) : SelectorB => data => [ data , + data ]
921
+
922
+ // @ts -expect-error (Page component is not rendered)
923
+ // eslint-disable-next-line
924
+ function Page ( ) {
925
+ const result = useQueries ( [
926
+ {
927
+ queryKey : getQueryKeyA ( ) ,
928
+ queryFn : getQueryFunctionA ( ) ,
929
+ } ,
930
+ {
931
+ queryKey : getQueryKeyB ( 'id' ) ,
932
+ queryFn : getQueryFunctionB ( ) ,
933
+ } ,
934
+ ] )
935
+ expectType < QueryObserverResult < number , unknown > > ( result [ 0 ] )
936
+ expectType < QueryObserverResult < string , unknown > > ( result [ 1 ] )
937
+
938
+ const withSelector = useQueries ( [
939
+ {
940
+ queryKey : getQueryKeyA ( ) ,
941
+ queryFn : getQueryFunctionA ( ) ,
942
+ select : getSelectorA ( ) ,
943
+ } ,
944
+ {
945
+ queryKey : getQueryKeyB ( 'id' ) ,
946
+ queryFn : getQueryFunctionB ( ) ,
947
+ select : getSelectorB ( ) ,
948
+ } ,
949
+ ] )
950
+ expectType < QueryObserverResult < [ number , string ] , unknown > > (
951
+ withSelector [ 0 ]
952
+ )
953
+ expectType < QueryObserverResult < [ string , number ] , unknown > > (
954
+ withSelector [ 1 ]
955
+ )
956
+ }
957
+ } )
958
+
902
959
it ( 'should not change state if unmounted' , async ( ) => {
903
960
const key1 = queryKey ( )
904
961
0 commit comments