function load Promise = (...args: any[]) => Promise>( loader: F, lazy = false, ): { refresh: (...args: P) => void; data: T | undefined; error: unknown } { let data: T | undefined, error: unknown; const refresh: (...args: P) => void = (...args: P) => { loader(...args) .then(d => (data = d)) .catch(e => (error = e)); }; if (!lazy) refresh(...([] as P extends [] ? [] : never)); return { refresh, data, error }; } // 用法 const loaderFunction = (a?: number, b?: number) => Promise.resolve((a ?? 0) + (b ?? 0)); const { refresh, data, error } = load(loaderFunction); refresh(); refresh(1); refresh(1, 2);