@@ -19,7 +19,10 @@ import {
19
19
QueryObserverResult ,
20
20
QueriesObserver ,
21
21
QueryFunction ,
22
+ UseQueryOptions ,
23
+ QueryKey ,
22
24
} from '../..'
25
+ import { EnsuredQueryKey , QueryFunctionContext } from '../../core'
23
26
24
27
describe ( 'useQueries' , ( ) => {
25
28
const queryCache = new QueryCache ( )
@@ -900,7 +903,8 @@ describe('useQueries', () => {
900
903
}
901
904
} )
902
905
903
- it ( 'handles types for QueryFunction factory with strongly typed QueryKey' , ( ) => {
906
+ it ( 'handles strongly typed queryFn factories and useQueries wrappers' , ( ) => {
907
+ // QueryKey + queryFn factory
904
908
type QueryKeyA = [ 'queryA' ]
905
909
const getQueryKeyA = ( ) : QueryKeyA => [ 'queryA' ]
906
910
type GetQueryFunctionA = ( ) => QueryFunction < number , QueryKeyA >
@@ -919,6 +923,28 @@ describe('useQueries', () => {
919
923
type SelectorB = ( data : string ) => [ string , number ]
920
924
const getSelectorB = ( ) : SelectorB => data => [ data , + data ]
921
925
926
+ // Wrapper with strongly typed array-parameter
927
+ function useWrappedQueries < TQueryFnData , TError , TData , TQueryKey extends QueryKey > (
928
+ queries : UseQueryOptions < TQueryFnData , TError , TData , TQueryKey > [ ]
929
+ ) {
930
+ return useQueries (
931
+ queries . map (
932
+ // no need to type the mapped query
933
+ ( query ) => {
934
+ const { queryFn : fn , queryKey : key , onError : err } = query ;
935
+ expectType < QueryFunction < TQueryFnData , TQueryKey > | undefined > ( fn )
936
+ return {
937
+ queryKey : key ,
938
+ onError : err ,
939
+ queryFn : ( ctx : QueryFunctionContext < TQueryKey > ) => {
940
+ expectType < EnsuredQueryKey < TQueryKey > > ( ctx . queryKey )
941
+ return fn ?. call ( { } , ctx ) ;
942
+ }
943
+ }
944
+ } )
945
+ )
946
+ }
947
+
922
948
// @ts -expect-error (Page component is not rendered)
923
949
// eslint-disable-next-line
924
950
function Page ( ) {
@@ -953,6 +979,14 @@ describe('useQueries', () => {
953
979
expectType < QueryObserverResult < [ string , number ] , unknown > > (
954
980
withSelector [ 1 ]
955
981
)
982
+
983
+ const withWrappedQueries = useWrappedQueries ( Array ( 10 ) . map ( ( ) => ( {
984
+ queryKey : getQueryKeyA ( ) ,
985
+ queryFn : getQueryFunctionA ( ) ,
986
+ select : getSelectorA ( ) ,
987
+ } ) ) )
988
+
989
+ expectType < QueryObserverResult < number | undefined , unknown > [ ] > ( withWrappedQueries ) ;
956
990
}
957
991
} )
958
992
0 commit comments