我有一个通用的函数类型,如下所示:
type Test<TArg> = (arg: TArg) => void;
大多数情况下,参数由符合此类型的函数使用:
let x1: Test<number> = (n) => { console.log(n) };
let x2: Test<string> = (s) => { alert(s) };
有时候,我有一个不带任何参数的函数:
let y1: Test<undefined> = () => { };
我希望能够调用此函数而不在调用点提供任何参数,如下所示:
y1();
但无论我为TArg
插入什么类型,我似乎都无法做到这一点。无论如何,如果不在Test
的定义中使参数成为可选项,那么这样做吗?
这是我尝试过的:
type Test<TArg> = (arg: TArg) => void;
let x: Test<number> = (n) => { console.log(n) };
let y1: Test<never> = () => { };
let y2: Test<any> = () => { };
let y3: Test<undefined> = () => { };
let y4: Test<null> = () => { };
x(1);
y1(); //Expected 1 arguments, but got 0.
y2(); //Expected 1 arguments, but got 0.
y3(); //Expected 1 arguments, but got 0.
y4(); //Expected 1 arguments, but got 0.
答案 0 :(得分:2)
如果有一个执行包装器是可以接受的,我已经提出了一个处理函数长度(0或1)的解决方案,并且对于参数类型是安全的:
RequestContext
请注意,如果您想要将此扩展到1个参数之外,您可以添加其他泛型类型,但是您必须手动定义每个类型并通过包装类进行,但它可以正常工作。
编辑删除了原始的可选参数解决方案