TypeScript 中的多个可选参数

Ima*_*mad 14 typescript

假设我有一个如下的函数

function addressCombo(street1:string, street2:string = "NA", street3?:string) {
    console.log("street1: " + street1);
    console.log("street1: " + street2);
    console.log("street2: " + street3);
}
Run Code Online (Sandbox Code Playgroud)

我想传递参数值street1,但street3不是street2那么我该怎么做呢?

我来自C#后台,我们按如下方式进行

addressCombo("ABC", street3 : "XYZ");
Run Code Online (Sandbox Code Playgroud)

phi*_*ole 15

这实际上并不是一个 TypeScript 问题,而是一个 JavaScript 问题。

可选参数必须位于后面,并且只有当所有后面的参数也被省略时才可以被省略。否则 JavaScript 不知道您为哪个参数传递了值。

考虑示例中的第二个参数是可选的。在调用中,您只需将其省略,而不传递值。

function addressCombo(street1, street2, street3) {}

addressCombo("LA", "LO")
Run Code Online (Sandbox Code Playgroud)

然而 JavaScript 并不知道你想要"LO"成为street3and not的争论street2。相反,它会将它们分配在行中。

换句话说,street3在你遗漏之后,你就不能再争论了street2

您可以显式传递undefined给可选参数,如果您省略参数,无论如何都会发生这种情况。在你的例子中,这将是

addressCombo("LA", undefined, "LO")
Run Code Online (Sandbox Code Playgroud)

另请参阅

跳过 JavaScript 函数中的参数

javascript:函数中可选的第一个参数

如何传递可选参数同时省略其他一些可选参数?


pza*_*ger 10

您可以使用对象来传递参数(或类似的东西streets: { [key: string]: string }):

function addressCombo({street1, street2, street3}: { street1?: string; street2?: string; street3?: string } = {}) {
  console.log("street1: " + street1);
  console.log("street2: " + street2);
  console.log("street3: " + street3);
}

addressCombo()
// Log:
// street1: undefined
// street2: undefined
// street3: undefined

addressCombo({ street1: 'A', street2: 'B', street3: 'C' });
// Log:
// street1: A
// street2: B
// street3: C

addressCombo({ street1: 'A', street3: 'C' });
// Log:
// street1: A
// street2: undefined
// street3: C
Run Code Online (Sandbox Code Playgroud)