【发布时间】:2021-09-05 21:55:09
【问题描述】:
假设我想创建一个这样的通用代理函数:
type Callback<F extends (...args: any) => any> = F extends (...args: infer P) => infer R
? (
P extends [] ? (onComplete?: (result: R) => void) => void : (parameters: P, onComplete?: (result: R) => void) => void
)
: never;
function createCallback<P extends unknown[], R, F extends (...args: P) => R>(func: F): Callback<F> {
return (parameters?: P | ((result: R) => void), onComplete?: (result: R) => void ): void => {
if (Array.isArray(parameters)) {
R result = func(...parameters);
if (onComplete) {
onComplete(result);
}
} else if (typeof parameters === "function") {
R result = func();
parameters(result);
}
}
}
如果传递的函数接受一些参数,那么返回的函数应该有一个签名(参数:[
在 TypeScript 中可以做到这一点吗?上面的代码无法编译,并显示返回的函数不可分配给回调类型的错误消息。
【问题讨论】:
-
请分享没有 wyntax 错误的示例。
R result = func(...parameters)- 不允许的语法
标签: typescript typescript-generics