import * as React from 'react' export interface FetchRequestProps { url: string options?: RequestInit } export interface FetchUpdateOptions { ignorePreviousData: boolean; } export interface FetchResult { data?: TData loading: boolean | null error?: Error request: FetchRequestProps response: Response fetch(url?: string | null, options?: RequestInit, updateOptions?: Partial): void; clearData(): void; } export type BodyMethods = 'arrayBuffer' | 'blob' | 'formData' | 'json' | 'text' export interface FetchProps { url: string options?: RequestInit | (() => RequestInit) manual?: boolean cache?: boolean | object as?: | 'auto' | BodyMethods | ((response: TData) => void) | { [type: string]: (res: TData) => Promise } fetchFunction?: (url: string, options: RequestInit) => Promise onDataChange?: (newData: TData, data: TData) => any onChange?: (result: FetchResult) => void children: (result: FetchResult) => React.ReactNode | React.ReactNode } export default class Fetch extends React.Component< FetchProps > { // Passing any to FetchResult as unable to use TData static Consumer: React.Consumer> }