如何给TypeScript函数参数添加可选的命名参数?
如何给TypeScript函数参数添加可选的命名参数?
我想定义一个可以接受箭头函数作为参数的方法。函数参数应该能够定义0个或多个自己的命名参数。我该如何做到这一点?
我尝试了以下代码:
public doSomething(fn: () => any) {}
和
public doSomething(fn: (...args) => any) {}
但是当我尝试按照以下方式调用时,它们都会抛出一个"提供的参数不匹配"的错误:
doSomething((test: string) => {})
(请注意,该函数的类型和参数数量可能在每次使用时都有所变化,所以我不能在原始方法上设置类型。)
我可以在传递的函数中使用...args
语法来传递参数,但我希望能够为特定参数指定类型和名称。
有办法做到这一点吗?
问题的出现原因是在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(()=>{});