@ohm-vision/react-async
Version:
Extentions to React to support asynchronous calls
23 lines (22 loc) • 1.48 kB
TypeScript
import { DependencyList, EffectCallback } from "react";
type ResponseTypes = "raw" | "arrayBuffer" | "blob" | "formData" | "text" | "json";
type _Response = globalThis.Response;
type UseFetchProps<TResponseType extends ResponseTypes = ResponseTypes> = {
url: string | URL | RequestInfo;
/**
* Indicates how to process the response
*/
responseType: TResponseType;
} & Omit<RequestInit, "signal">;
type Response<TResponseType extends ResponseTypes> = TResponseType extends "raw" ? _Response : Omit<_Response, "bodyUsed" | "body" | "arrayBuffer" | "blob" | "formData" | "json" | "text" | "clone"> & {
body: (TResponseType extends "json" ? Awaited<ReturnType<_Response["json"]>> : TResponseType extends "arrayBuffer" ? Awaited<ReturnType<_Response["arrayBuffer"]>> : TResponseType extends "blob" ? Awaited<ReturnType<_Response["blob"]>> : TResponseType extends "formData" ? Awaited<ReturnType<_Response["formData"]>> : TResponseType extends "text" ? Awaited<ReturnType<_Response["text"]>> : unknown);
};
/**
* Represents a core fetch request
* @param param0 standard `fetch` props
* @param deps Dependency list
* @param destructor destructor
* @returns [ loading, `Response`, Error ]
*/
export declare function useFetch<TResponseType extends ResponseTypes = ResponseTypes>({ url, responseType, ...init }: UseFetchProps<TResponseType>, deps: DependencyList, destructor?: ReturnType<EffectCallback>): [boolean, Response<TResponseType>, any];
export {};