【问题标题】:Skip arguments in a TypeScript function跳过 TypeScript 函数中的参数
【发布时间】:2021-12-23 05:14:37
【问题描述】:

我已经尝试了问题Skip arguments in a JavaScript function 中的answer of Pacerier。但它似乎不起作用。

我有一个有很多参数的函数

this.service.list("all",null, null, localStorage.getItem('currentProgram'), null, 100, ...Array(2), environment.liveMode).subscribe(...)

我发现的唯一方法就是一一写出来,比如(,null, null or undefined,undefined)。

我也设置了一个测试方法,看看是不是不一样,但是效果也不好。

test(a: any, b: any, c: any, d: string) {
    console.log(d)
}

ngOnInit() {
    this.test(...Array(3), "a")
}

我还尝试了答案中提出的其他语法。

在 TypeScript 中有没有更简洁的方法来做到这一点?

【问题讨论】:

  • 你的函数有很多可选参数,这可以看作是代码异味。如果您可以重构函数,那么您应该使用一个对象而不是多个参数,例如 function foo(options: {a?: string, b?: number})

标签: angular typescript function arguments spread


【解决方案1】:

在 TypeScript 中,如果你想跳过一个参数,你必须明确地传递 undefinednull 作为参数值。示例:

function f(param1?: string, param2?: number, param3?: boolean) {
// do something
}

f(,,true); // ❌ Error
f(...[,,], true); // ❌ Error
f(...Array(2), true); // ❌ Error
f(undefined, undefined, true); // ✅ Works 
f(null, null, true); // ✅ Works

您可以在 TypeScript 文档的此部分中找到更多信息和示例:https://www.typescriptlang.org/docs/handbook/2/functions.html#optional-parameters

【讨论】:

  • @crg 我可以看到,我只是向您描述了一些可能的选择。
猜你喜欢
  • 2011-07-20
  • 2015-12-07
  • 2019-05-24
  • 2018-06-13
  • 2013-10-02
  • 1970-01-01
  • 2012-04-10
  • 2020-12-07
相关资源
最近更新 更多