@@ -6,23 +6,43 @@ import type {
66} from "axios" ;
77import axios from "axios" ;
88
9- export type _ResponseDataItemType < T > = T extends AxiosResponse < infer D1 >
10- ? D1
11- : T extends { data : infer D2 } | { data ?: infer D2 }
12- ? D2
13- : undefined ;
14-
15- export interface Resource < T , D = any , W = AxiosResponse >
16- extends AxiosRequestConfig < D > {
17- _payload ?: W extends AxiosResponse ? AxiosResponse < T , D > : T ;
9+ export interface Resource <
10+ T = AxiosResponse ,
11+ D = any ,
12+ K1 extends keyof T = never ,
13+ K2 extends keyof T [ K1 ] = never ,
14+ K3 extends keyof T [ K1 ] [ K2 ] = never ,
15+ K4 extends keyof T [ K1 ] [ K2 ] [ K3 ] = never ,
16+ K5 extends keyof T [ K1 ] [ K2 ] [ K3 ] [ K4 ] = never ,
17+ > extends AxiosRequestConfig < D > {
18+ _payload ?: T ;
19+ _payload_item ?: [ K5 ] extends [ never ]
20+ ? [ K4 ] extends [ never ]
21+ ? [ K3 ] extends [ never ]
22+ ? [ K2 ] extends [ never ]
23+ ? [ K1 ] extends [ never ]
24+ ? T extends AxiosResponse < infer DD > | { data ?: infer DD }
25+ ? DD
26+ : undefined
27+ : T [ K1 ]
28+ : T [ K1 ] [ K2 ]
29+ : T [ K1 ] [ K2 ] [ K3 ]
30+ : T [ K1 ] [ K2 ] [ K3 ] [ K4 ]
31+ : T [ K1 ] [ K2 ] [ K3 ] [ K4 ] [ K5 ] ;
1832}
1933
20- export type Request < T = any , D = any , W = any > = (
21- ...args : any [ ]
22- ) => Resource < T , D , W > ;
34+ export type Request <
35+ T = any ,
36+ D = any ,
37+ K1 extends keyof T = never ,
38+ K2 extends keyof T [ K1 ] = never ,
39+ K3 extends keyof T [ K1 ] [ K2 ] = never ,
40+ K4 extends keyof T [ K1 ] [ K2 ] [ K3 ] = never ,
41+ K5 extends keyof T [ K1 ] [ K2 ] [ K3 ] [ K4 ] = never ,
42+ > = ( ...args : any [ ] ) => Resource < T , D , K1 , K2 , K3 , K4 , K5 > ;
2343
2444export type Payload < T extends Request , Check = false > = Check extends true
25- ? _ResponseDataItemType < ReturnType < T > [ "_payload" ] >
45+ ? ReturnType < T > [ "_payload_item" ]
2646 : ReturnType < T > [ "_payload" ] ;
2747export type BodyData < T extends Request > = ReturnType < T > [ "data" ] ;
2848
@@ -71,18 +91,23 @@ export type RequestCallbackFn<T extends Request> = {
7191/**
7292 * For TypeScript type deduction
7393 */
74- export function _request < T , D = any , W = false > (
75- config : AxiosRequestConfig < D > ,
76- ) : Resource < T , D , W > {
94+ export function _request <
95+ T ,
96+ D = any ,
97+ K1 extends keyof T = never ,
98+ K2 extends keyof T [ K1 ] = never ,
99+ K3 extends keyof T [ K1 ] [ K2 ] = never ,
100+ K4 extends keyof T [ K1 ] [ K2 ] [ K3 ] = never ,
101+ K5 extends keyof T [ K1 ] [ K2 ] [ K3 ] [ K4 ] = never ,
102+ > ( config : AxiosRequestConfig < D > ) : Resource < T , D , K1 , K2 , K3 , K4 , K5 > {
77103 return config ;
78104}
79105
80106/**
81107 * For TypeScript type deduction
82108 */
83- export const request = < T , D = any , W = AxiosResponse < T , D > > (
84- config : AxiosRequestConfig < D > ,
85- ) => _request < T , D , W > ( config ) ;
109+ export const request = < T , D = any > ( config : AxiosRequestConfig < D > ) =>
110+ _request < AxiosResponse < T , D > , D > ( config ) ;
86111
87112export function createRequestError <
88113 T = any ,
0 commit comments