@@ -22,12 +22,17 @@ import { Retryer, CancelOptions, isCancelledError } from './retryer'
2222
2323// TYPES
2424
25- interface QueryConfig < TQueryFnData , TError , TData > {
25+ interface QueryConfig <
26+ TQueryFnData ,
27+ TError ,
28+ TData ,
29+ TQueryKey extends QueryKey = QueryKey
30+ > {
2631 cache : QueryCache
27- queryKey : QueryKey
32+ queryKey : TQueryKey
2833 queryHash : string
29- options ?: QueryOptions < TQueryFnData , TError , TData >
30- defaultOptions ?: QueryOptions < TQueryFnData , TError , TData >
34+ options ?: QueryOptions < TQueryFnData , TError , TData , TQueryKey >
35+ defaultOptions ?: QueryOptions < TQueryFnData , TError , TData , TQueryKey >
3136 state ?: QueryState < TData , TError >
3237}
3338
@@ -46,20 +51,28 @@ export interface QueryState<TData = unknown, TError = unknown> {
4651 status : QueryStatus
4752}
4853
49- export interface FetchContext < TQueryFnData , TError , TData > {
54+ export interface FetchContext <
55+ TQueryFnData ,
56+ TError ,
57+ TData ,
58+ TQueryKey extends QueryKey = QueryKey
59+ > {
5060 fetchFn : ( ) => unknown | Promise < unknown >
5161 fetchOptions ?: FetchOptions
52- options : QueryOptions < TQueryFnData , TError , TData >
53- queryKey : QueryKey
62+ options : QueryOptions < TQueryFnData , TError , TData , TQueryKey >
63+ queryKey : TQueryKey
5464 state : QueryState < TData , TError >
5565}
5666
5767export interface QueryBehavior <
5868 TQueryFnData = unknown ,
5969 TError = unknown ,
60- TData = TQueryFnData
70+ TData = TQueryFnData ,
71+ TQueryKey extends QueryKey = QueryKey
6172> {
62- onFetch : ( context : FetchContext < TQueryFnData , TError , TData > ) => void
73+ onFetch : (
74+ context : FetchContext < TQueryFnData , TError , TData , TQueryKey >
75+ ) => void
6376}
6477
6578export interface FetchOptions {
@@ -128,11 +141,12 @@ export interface SetStateOptions {
128141export class Query <
129142 TQueryFnData = unknown ,
130143 TError = unknown ,
131- TData = TQueryFnData
144+ TData = TQueryFnData ,
145+ TQueryKey extends QueryKey = QueryKey
132146> {
133- queryKey : QueryKey
147+ queryKey : TQueryKey
134148 queryHash : string
135- options ! : QueryOptions < TQueryFnData , TError , TData >
149+ options ! : QueryOptions < TQueryFnData , TError , TData , TQueryKey >
136150 initialState : QueryState < TData , TError >
137151 revertState ?: QueryState < TData , TError >
138152 state : QueryState < TData , TError >
@@ -142,10 +156,10 @@ export class Query<
142156 private promise ?: Promise < TData >
143157 private gcTimeout ?: number
144158 private retryer ?: Retryer < TData , TError >
145- private observers : QueryObserver < any , any , any , any > [ ]
146- private defaultOptions ?: QueryOptions < TQueryFnData , TError , TData >
159+ private observers : QueryObserver < any , any , any , any , any > [ ]
160+ private defaultOptions ?: QueryOptions < TQueryFnData , TError , TData , TQueryKey >
147161
148- constructor ( config : QueryConfig < TQueryFnData , TError , TData > ) {
162+ constructor ( config : QueryConfig < TQueryFnData , TError , TData , TQueryKey > ) {
149163 this . defaultOptions = config . defaultOptions
150164 this . setOptions ( config . options )
151165 this . observers = [ ]
@@ -158,7 +172,7 @@ export class Query<
158172 }
159173
160174 private setOptions (
161- options ?: QueryOptions < TQueryFnData , TError , TData >
175+ options ?: QueryOptions < TQueryFnData , TError , TData , TQueryKey >
162176 ) : void {
163177 this . options = { ...this . defaultOptions , ...options }
164178
@@ -169,7 +183,9 @@ export class Query<
169183 )
170184 }
171185
172- setDefaultOptions ( options : QueryOptions < TQueryFnData , TError , TData > ) : void {
186+ setDefaultOptions (
187+ options : QueryOptions < TQueryFnData , TError , TData , TQueryKey >
188+ ) : void {
173189 this . defaultOptions = options
174190 }
175191
@@ -290,7 +306,7 @@ export class Query<
290306 this . retryer ?. continue ( )
291307 }
292308
293- addObserver ( observer : QueryObserver < any , any , any , any > ) : void {
309+ addObserver ( observer : QueryObserver < any , any , any , any , any > ) : void {
294310 if ( this . observers . indexOf ( observer ) === - 1 ) {
295311 this . observers . push ( observer )
296312
@@ -301,7 +317,7 @@ export class Query<
301317 }
302318 }
303319
304- removeObserver ( observer : QueryObserver < any , any , any , any > ) : void {
320+ removeObserver ( observer : QueryObserver < any , any , any , any , any > ) : void {
305321 if ( this . observers . indexOf ( observer ) !== - 1 ) {
306322 this . observers = this . observers . filter ( x => x !== observer )
307323
@@ -334,7 +350,7 @@ export class Query<
334350 }
335351
336352 fetch (
337- options ?: QueryOptions < TQueryFnData , TError , TData > ,
353+ options ?: QueryOptions < TQueryFnData , TError , TData , TQueryKey > ,
338354 fetchOptions ?: FetchOptions
339355 ) : Promise < TData > {
340356 if ( this . state . isFetching ) {
@@ -363,7 +379,7 @@ export class Query<
363379
364380 // Create query function context
365381 const queryKey = ensureArray ( this . queryKey )
366- const queryFnContext : QueryFunctionContext = {
382+ const queryFnContext : QueryFunctionContext < unknown [ ] > = {
367383 queryKey,
368384 pageParam : undefined ,
369385 }
@@ -375,7 +391,7 @@ export class Query<
375391 : Promise . reject ( 'Missing queryFn' )
376392
377393 // Trigger behavior hook
378- const context : FetchContext < TQueryFnData , TError , TData > = {
394+ const context : FetchContext < TQueryFnData , TError , TData , any > = {
379395 fetchOptions,
380396 options : this . options ,
381397 queryKey,
@@ -421,7 +437,7 @@ export class Query<
421437 if ( ! isCancelledError ( error ) ) {
422438 // Notify cache callback
423439 if ( this . cache . config . onError ) {
424- this . cache . config . onError ( error , this as Query )
440+ this . cache . config . onError ( error , this as Query < any , any , any , any > )
425441 }
426442
427443 // Log error
@@ -464,7 +480,7 @@ export class Query<
464480 }
465481
466482 protected getDefaultState (
467- options : QueryOptions < TQueryFnData , TError , TData >
483+ options : QueryOptions < TQueryFnData , TError , TData , TQueryKey >
468484 ) : QueryState < TData , TError > {
469485 const data =
470486 typeof options . initialData === 'function'
0 commit comments