-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
HandlesApiResponse.ts
47 lines (42 loc) · 1.09 KB
/
HandlesApiResponse.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* The http library agnostic response.
*/
export interface ApiResponse<
T = any[] | Record<string, any> | string | null
> extends Pick<Response, 'headers' | 'status' | 'statusText'> {
/**
* The parsed response content.
* (in case of libraries like axios)
*/
data?: T;
/**
* The request that got this response.
*/
request?: Record<string, any> & (RequestInit | XMLHttpRequest);
/**
* The url the request was sent to.
*/
url?: string;
/**
* Additional information.
*/
[key: string]: any;
/**
* The fetch json method resolving to the given type.
*/
json?: () => Promise<Exclude<T, string | null>>;
}
/**
* Interface prescribes what's expected to be implemented
* by an object that is used for handling the requests.
*/
export default interface HandlesApiResponse {
/**
* Handle the promised response.
*
* @param promise
*
* @return {Promise<any>}
*/
handle: <T = unknown>(promise: Promise<ApiResponse>) => Promise<T>;
}