2014-06-19 39 views
1

我想能够定义一个接受箭头函数作为参数的方法。函数参数应该能够定义自己的0个或多个命名参数。我怎样才能做到这一点?如何将可选的命名参数添加到TypeScript函数参数?

我已经试过

public doSomething(fn:() => any) {} 

public doSomething(fn: (...args) => any) {} 

但他们都扔了,当我尝试调用它,如下所示 “提供的参数不匹配” 错误:

doSomething((test: string) => {}) 

请注意,此功能的参数类型和数量可能因使用情况而异,所以我可以' t设置原始方法的类型。

我可以在传递的函数中使用...args语法提供参数,但我希望能够键入和命名特定参数。

有没有办法做到这一点?

回答

4

有两个选项。原因类型安全。如果你通过下面的陈述进行工作,那么它应该很清楚。

修正回调:

如果你的函数需要调用带有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'个参数调用回调,在签名中指定它们的名称。这是回调到忽略这些。例如。这个回调忽略它们:

// Specify the number of arguments 
function doSomething(fn: (ar1:string,arg2:string) => any) {} 

doSomething(()=>{}); 
+1

啊是的,这是有道理的。谢谢! – JBarnes

相关问题