【发布时间】:2022-10-13 01:04:29
【问题描述】:
当F 没有接收到参数时,我正在寻找一种不为泛型函数Parameter<F> 类型参数提供空数组的方法。
以下工作示例显示了当前状态
type A<F extends (...args: any[]) => any> = {
shouldPrintHello: boolean;
params: Parameters<F>;
};
const wrappingFunction = <F extends (...args: any[]) => any>(sentFunction: F, defaultParams: A<F>) => {
const innterFunction = (...args: Parameters<F>) => {
if (defaultParams.shouldPrintHello) console.log("hello");
sentFunction(args);
return;
};
const defaultValue = sentFunction(defaultParams);
return innterFunction;
};
const f1 = wrappingFunction(
(arg0: string) => {
return;
},
{ shouldPrintHello: true, params: ["defaultString"] }
);
const f2 = wrappingFunction(
() => {
return;
},
{ shouldPrintHello: true, params: [] }
);
f1("a string");
f2();
所需的(伪)代码更改:
type A<F extends (...args: any[]) => any> = {
shouldPrintHello: boolean;
params: Parameters<F> === [] ? undefined : Parameters<F>;
};
const f2 = wrappingFunction(
() => {
return;
},
{ shouldPrintHello: true }
);
f2();
【问题讨论】:
-
您检查过
extends关键字吗? -
是的,但遗憾的是我不明白它在这里有什么用处
-
如何?它的功能与平等非常相似。虽然不是“平等”,而是更多的是“<:”,但在这里仍然有效。
-
this approach 是否满足您的需求?如果是这样,我可以写一个答案;如果没有,我错过了什么? (请在您的评论中说@jcalz 以通知我)
-
@jcalz 谢谢,但这种方法对我不起作用。我正在尝试按如下方式实现它但没有成功:link
标签: typescript generics