我希望能够定义一个接受箭头函数作为参数的方法。函数参数应该能够定义自己的0个或多个命名参数。我怎么能这样做?
我试过
public doSomething(fn: () => any) {}
和
public doSomething(fn: (...args) => any) {}
但是当我尝试按如下方式调用它时,它们都抛出“提供的参数不匹配”错误:
doSomething((test: string) => {})
(请注意,此功能的参数类型和数量可能因用途而异,因此我无法在原始方法上设置类型。)
我可以使用传递函数中的...args
语法提供参数,但我希望能够键入和命名特定参数。
有办法做到这一点吗?
答案 0 :(得分:5)
两个选项。 类型安全的原因。如果您完成以下陈述,则应该清楚。
如果你的函数希望用0或更多参数调用回调函数,那么回调必须是可以的(即有可选参数),即
function doSomething(fn: () => any) {}
// All arguments need to optional
doSomething((a?:string)=>{});
同样:
function doSomething(fn: (...args:string[]) => any) {}
// All arguments need to optional
doSomething((a?:string)=>{});
如果您打算使用N' N'参数,在签名中指定其名称。这取决于取或忽略这些回调。例如。这个回调忽略了它们:
// Specify the number of arguments
function doSomething(fn: (ar1:string,arg2:string) => any) {}
doSomething(()=>{});