我试图从函数的第二个参数中钻取一个参数,该参数是一个对象;从我想要获取"onSuccess"函数(它是可选的,但当我请求它时它将是必需的)的对象=>;获得动态函数的第一个参数.
Parameters<NonNullable<Parameters<typeof sampleFunction>[1]["onSuccess"]>>[0]
可以工作,但我不想到处使用,因为它的可读性不是很好.我想做一些动感的东西,比如:ResponseOf<typeof sampleFunction>
interface ApiCallback<T = any> {
onSuccess?: (response: T, headers?: any) => void;
onFailure?: (error: unknown) => void;
label: string;
// ...other
}
interface ApiActionPayload<T = any> extends ApiCallback<T> {
url: string;
// ... other
}
interface ApiAction<T = any> {
type: "API";
payload: ApiActionPayload<T>;
}
function apiAction<T = any>({
url = "",
label = "",
...props
}: ApiActionPayload<T>): ApiAction<T> {
return {
type: "API",
payload: {
url,
label,
...props
}
}
}
const sampleFunction = (_param1: any, callbacks: ApiCallback<{ data: any[] }>): ApiAction => {
return apiAction({
url: "google.com",
...callbacks
})
}
type DesiredNonDynamicType = Parameters<NonNullable<Parameters<typeof sampleFunction>[1]["onSuccess"]>>[0];
export type ResponseOf<
T extends (
first: any,
second: { onSuccess?: (x: any) => any; label: string;[k: string]: any },
...args: any[]
) => any> = T extends (first: any, second: { onSuccess?: (x: infer U) => any;[k: string]: any }, ...args: any[]) => any
? U : never;
type DesiredType = ResponseOf<typeof sampleFunction>;
我try 过的一件事,例如:
export type ResponseOf<
T extends (
first: any,
second: { onSuccess?: (x: any) => any; label: string; [k: string]: any },
...args: any[]
) => any
= T extends (first: any, second: { onSuccess?: (x: infer U) => any; [k: string]: any }, ...args: any[]) => any
? U
: never;