diff --git a/_internal/types.ts b/_internal/types.ts index 467a8cf06..28f8d6ad6 100644 --- a/_internal/types.ts +++ b/_internal/types.ts @@ -336,13 +336,22 @@ export type SWRConfiguration< Fn extends BareFetcher<any> = BareFetcher<any> > = Partial<PublicConfiguration<Data, Error, Fn>> -export interface SWRResponse<Data = any, Error = any> { - data: Data | undefined - error: Error | undefined - mutate: KeyedMutator<Data> +export type SWRResponse<Data = any, Error = any> = { mutate: KeyedMutator<Data> } & ({ + data: undefined + error: undefined + isValidating: true + isLoading: true +} | { + data: Data + error: undefined isValidating: boolean - isLoading: boolean -} + isLoading: false +} | { + data: undefined + error: Error + isValidating: boolean + isLoading: false +}) export type KeyLoader<Args extends Arguments = Arguments> = | ((index: number, previousPageData: any | null) => Args) diff --git a/infinite/types.ts b/infinite/types.ts index c85f08364..e7833c556 100644 --- a/infinite/types.ts +++ b/infinite/types.ts @@ -34,8 +34,7 @@ export interface SWRInfiniteConfiguration< fetcher?: Fn } -export interface SWRInfiniteResponse<Data = any, Error = any> - extends SWRResponse<Data[], Error> { +export type SWRInfiniteResponse<Data = any, Error = any> = SWRResponse<Data[], Error> & { size: number setSize: ( size: number | ((_size: number) => number)