TypeScript - "[]" 可赋给 "P" 类型的约束,但可以使用约束 "[]" 的其他子类型实例化 "P"?-灵析社区

东三环

function load Promise>( 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 }`。

阅读量:9

点赞量:0

问AI
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);