fix(projects): fix flatRequest error type. fixed #376

This commit is contained in:
Soybean 2024-04-03 00:02:09 +08:00
parent 9125cc9b60
commit 1ec5ea0ff1
3 changed files with 22 additions and 19 deletions

View File

@ -145,9 +145,10 @@ export function createFlatRequest<ResponseData = any, State = Record<string, unk
) { ) {
const { instance, opts, cancelRequest, cancelAllRequest } = createCommonRequest<ResponseData>(axiosConfig, options); const { instance, opts, cancelRequest, cancelAllRequest } = createCommonRequest<ResponseData>(axiosConfig, options);
const flatRequest: FlatRequestInstance<State> = async function flatRequest<T = any, R extends ResponseType = 'json'>( const flatRequest: FlatRequestInstance<State, ResponseData> = async function flatRequest<
config: CustomAxiosRequestConfig T = any,
) { R extends ResponseType = 'json'
>(config: CustomAxiosRequestConfig) {
try { try {
const response: AxiosResponse<ResponseData> = await instance(config); const response: AxiosResponse<ResponseData> = await instance(config);
@ -163,7 +164,7 @@ export function createFlatRequest<ResponseData = any, State = Record<string, unk
} catch (error) { } catch (error) {
return { data: null, error }; return { data: null, error };
} }
} as FlatRequestInstance<State>; } as FlatRequestInstance<State, ResponseData>;
flatRequest.cancelRequest = cancelRequest; flatRequest.cancelRequest = cancelRequest;
flatRequest.cancelAllRequest = cancelAllRequest; flatRequest.cancelAllRequest = cancelAllRequest;

View File

@ -85,15 +85,17 @@ export type FlatResponseSuccessData<T = any> = {
error: null; error: null;
}; };
export type FlatResponseFailData<T = any> = { export type FlatResponseFailData<ResponseData = any> = {
data: null; data: null;
error: AxiosError<T>; error: AxiosError<ResponseData>;
}; };
export type FlatResponseData<T = any> = FlatResponseSuccessData<T> | FlatResponseFailData<T>; export type FlatResponseData<T = any, ResponseData = any> =
| FlatResponseSuccessData<T>
| FlatResponseFailData<ResponseData>;
export interface FlatRequestInstance<S = Record<string, unknown>> extends RequestInstanceCommon<S> { export interface FlatRequestInstance<S = Record<string, unknown>, ResponseData = any> extends RequestInstanceCommon<S> {
<T = any, R extends ResponseType = 'json'>( <T = any, R extends ResponseType = 'json'>(
config: CustomAxiosRequestConfig<R> config: CustomAxiosRequestConfig<R>
): Promise<FlatResponseData<MappedType<R, T>>>; ): Promise<FlatResponseData<MappedType<R, T>, ResponseData>>;
} }

View File

@ -16,19 +16,19 @@ export type HookRequestInstanceResponseSuccessData<T = any> = {
error: Ref<null>; error: Ref<null>;
}; };
export type HookRequestInstanceResponseFailData<T = any> = { export type HookRequestInstanceResponseFailData<ResponseData = any> = {
data: Ref<null>; data: Ref<null>;
error: Ref<AxiosError<T>>; error: Ref<AxiosError<ResponseData>>;
}; };
export type HookRequestInstanceResponseData<T = any> = { export type HookRequestInstanceResponseData<T = any, ResponseData = any> = {
loading: Ref<boolean>; loading: Ref<boolean>;
} & (HookRequestInstanceResponseSuccessData<T> | HookRequestInstanceResponseFailData<T>); } & (HookRequestInstanceResponseSuccessData<T> | HookRequestInstanceResponseFailData<ResponseData>);
export interface HookRequestInstance { export interface HookRequestInstance<ResponseData = any> {
<T = any, R extends ResponseType = 'json'>( <T = any, R extends ResponseType = 'json'>(
config: CustomAxiosRequestConfig config: CustomAxiosRequestConfig
): HookRequestInstanceResponseData<MappedType<R, T>>; ): HookRequestInstanceResponseData<MappedType<R, T>, ResponseData>;
cancelRequest: (requestId: string) => void; cancelRequest: (requestId: string) => void;
cancelAllRequest: () => void; cancelAllRequest: () => void;
} }
@ -45,13 +45,13 @@ export default function createHookRequest<ResponseData = any>(
) { ) {
const request = createFlatRequest<ResponseData>(axiosConfig, options); const request = createFlatRequest<ResponseData>(axiosConfig, options);
const hookRequest: HookRequestInstance = function hookRequest<T = any, R extends ResponseType = 'json'>( const hookRequest: HookRequestInstance<ResponseData> = function hookRequest<T = any, R extends ResponseType = 'json'>(
config: CustomAxiosRequestConfig config: CustomAxiosRequestConfig
) { ) {
const { loading, startLoading, endLoading } = useLoading(); const { loading, startLoading, endLoading } = useLoading();
const data = ref<MappedType<R, T> | null>(null); const data = ref<MappedType<R, T> | null>(null) as Ref<MappedType<R, T>>;
const error = ref<AxiosError<MappedType<R, T>> | null>(null); const error = ref<AxiosError<ResponseData> | null>(null) as Ref<AxiosError<ResponseData> | null>;
startLoading(); startLoading();
@ -70,7 +70,7 @@ export default function createHookRequest<ResponseData = any>(
data, data,
error error
}; };
} as HookRequestInstance; } as HookRequestInstance<ResponseData>;
hookRequest.cancelRequest = request.cancelRequest; hookRequest.cancelRequest = request.cancelRequest;
hookRequest.cancelAllRequest = request.cancelAllRequest; hookRequest.cancelAllRequest = request.cancelAllRequest;