@@ -19,7 +19,10 @@ import {
1919 QueryObserverResult ,
2020 QueriesObserver ,
2121 QueryFunction ,
22+ UseQueryOptions ,
23+ QueryKey ,
2224} from '../..'
25+ import { EnsuredQueryKey , QueryFunctionContext } from '../../core'
2326
2427describe ( 'useQueries' , ( ) => {
2528 const queryCache = new QueryCache ( )
@@ -900,7 +903,8 @@ describe('useQueries', () => {
900903 }
901904 } )
902905
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
904908 type QueryKeyA = [ 'queryA' ]
905909 const getQueryKeyA = ( ) : QueryKeyA => [ 'queryA' ]
906910 type GetQueryFunctionA = ( ) => QueryFunction < number , QueryKeyA >
@@ -919,6 +923,28 @@ describe('useQueries', () => {
919923 type SelectorB = ( data : string ) => [ string , number ]
920924 const getSelectorB = ( ) : SelectorB => data => [ data , + data ]
921925
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+
922948 // @ts -expect-error (Page component is not rendered)
923949 // eslint-disable-next-line
924950 function Page ( ) {
@@ -953,6 +979,14 @@ describe('useQueries', () => {
953979 expectType < QueryObserverResult < [ string , number ] , unknown > > (
954980 withSelector [ 1 ]
955981 )
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 ) ;
956990 }
957991 } )
958992
0 commit comments