function load<T, P extends [], F extends (...args: P) => Promise<T>>(
loader: F,
lazy = false,
) {
let data: T | undefined, error: unknown
const refresh: (...args: P) => void = (...args) =>
void loader(...args)
.then(d => (data = d))
.catch((e: unknown) => (error = e))
/**
* 类型“[]”的参数不能赋给类型“P”的参数。
* "[]" 可赋给 "P" 类型的约束,但可以使用约束 "[]" 的其他子类型实例化 "P"。ts(2345)
*/
if (!lazy) refresh()
return { refresh, data, error }
}
// { refresh: () => void; data: unknown; error: unknown }
load((a?: number, b?: number) => Promise.resolve((a ?? 0) + (b ?? 0)))
我希望 loader
函数没有参数列表,或者所有参数都是可选的。
同时返回值的类型应该是 { refresh: (a?: number, b?: number) => void, data: number | undefined; error: unknown }
。