如何将可选的命名参数添加到TypeScript函数参数中?

时间:2014-06-19 10:40:17

标签: typescript

我希望能够定义一个接受箭头函数作为参数的方法。函数参数应该能够定义自己的0个或多个命名参数。我怎么能这样做?

我试过

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

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

但是当我尝试按如下方式调用它时,它们都抛出“提供的参数不匹配”错误:

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

请注意,此功能的参数类型和数量可能因用途而异,因此我无法在原始方法上设置类型。

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

有办法做到这一点吗?

1 个答案:

答案 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(()=>{});