如何给TypeScript函数参数添加可选的命名参数?

15 浏览
0 Comments

如何给TypeScript函数参数添加可选的命名参数?

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

我尝试了以下代码:

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

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

但是当我尝试按照以下方式调用时,它们都会抛出一个"提供的参数不匹配"的错误:

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

(请注意,该函数的类型和参数数量可能在每次使用时都有所变化,所以我不能在原始方法上设置类型。)

我可以在传递的函数中使用...args语法来传递参数,但我希望能够为特定参数指定类型和名称。

有办法做到这一点吗?

0
0 Comments

问题的出现原因是在TypeScript中,我们想要给函数参数添加可选的命名参数,但是在定义函数时没有正确地处理可选参数的情况。

解决方法有两种:

第一种方法是修复回调函数的定义。如果我们的函数希望以0个或更多个参数调用回调函数,那么回调函数必须对此作出适应(即具有可选参数)。例如:

function doSomething(fn: () => any) {}
// 所有参数都需要是可选的
doSomething((a?:string)=>{});

或者:

function doSomething(fn: (...args:string[]) => any) {}
// 所有参数都需要是可选的
doSomething((a?:string)=>{});

第二种方法是修复回调函数的签名。如果我们将回调函数调用时传递的参数数量确定为N个,那么在回调函数的签名中指定这些参数的名称。回调函数可以选择接受或忽略这些参数。例如,下面的回调函数忽略了这些参数:

// 指定参数数量
function doSomething(fn: (arg1:string, arg2:string) => any) {}
doSomething(()=>{});

0