【问题标题】:How can I add optional named parameters to a TypeScript function parameter?如何将可选的命名参数添加到 TypeScript 函数参数?
【发布时间】:2014-08-09 20:58:24
【问题描述】:

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

我试过了

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

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

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

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

(请注意,这个函数的参数类型和数量可能会因使用情况而异,所以我无法在原始方法上设置类型。)

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

有没有办法做到这一点?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    两个选项。原因类型安全。如果您通过下面的陈述,它应该是清楚的。

    修复回调:

    如果您的函数希望使用 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”个参数调用回调,请在签名中指定它们的名称。由 takeignore 这些回调决定。例如。此回调忽略它们:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2021-10-15
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多