मैं एक समारोह लेता है लेता है एक मनमाने ढंग से async समारोह और रिटर्न के परिणाम का इंतजार कर रहा है कि async कार्य है, लेकिन एक में लिपटे प्रयास करें/catch कहते हैं, जो कुछ अतिरिक्त तर्क । देखें टीएस खेल का मैदान.
const with401Redirection =
<T extends (...args: any[]) => Promise<any>>(
call: T
): ((...args: Parameters<T>) => ReturnType<T>) =>
// @ts-expect-error
async (...args: Parameters<T>): ReturnType<T> => {
try {
return await call(...args);
} catch (error) {
if ((error as any).httpStatus === 401) {
// do some stuff here
}
throw error;
}
};
interface User {
id: string;
name: string;
}
interface ItemPayload {
field1: string;
field2: string;
}
interface ItemResponse {
id: string;
field1: string;
field2: string;
}
const client = {
get<ResponseType>(url: string): Promise<ResponseType> {
// logic to hit server and return result here
return '' as any;
},
post<ResponseType>(url: string, body: Record<string, any>): Promise<ResponseType> {
// logic to hit server and return result here
return '' as any;
}
};
const getUser = with401Redirection(() =>
client.get<User>('url_1')
);
const saveItem = with401Redirection((body: ItemPayload) =>
client.post<ItemResponse>('url_2', body)
);
मैं की तरह लग रहा है // @ts-expect-error
में with401Redirection
नहीं होना चाहिए आवश्यक-मैं कैसे कर सकते हैं इसे हटाने या आम तौर पर साफ टाइपिंग के with401Redirection
समारोह? मन में रखने के लिए मैं चाहता हूँ बनाए रखने के लिए तथ्य यह है कि getUser
और saveItem
कार्यों के अपने प्रकार स्वचालित रूप से inferred के लिए मुझे.