TypeScript中的多个可选参数
假设我有一个如下的函数TypeScript中的多个可选参数,typescript,Typescript,假设我有一个如下的函数 function addressCombo(street1:string, street2:string = "NA", street3?:string) { console.log("street1: " + street1); console.log("street1: " + street2); console.log("street2: " + street3); } 我想传递参数street1和street3的值,但不传递street2
function addressCombo(street1:string, street2:string = "NA", street3?:string) {
console.log("street1: " + street1);
console.log("street1: " + street2);
console.log("street2: " + street3);
}
我想传递参数street1
和street3
的值,但不传递street2
的值,那么我该怎么做呢
我来自C#
背景,我们的做法如下
addressCombo("ABC", street3 : "XYZ");
这不是一个真正的类型脚本问题,而是一个JavaScript问题 可选参数必须在后面,并且只有在删除所有后面的参数时才能删除。否则JavaScript不知道为哪个参数传递了值 假设示例中的第二个参数是可选的。在一个调用中,您只需省略它,而不传递值
function addressCombo(street1, street2, street3) {}
addressCombo("LA", "LO")
但是,JavaScript不知道您打算将“LO”
作为street3
的参数,而不是street2
的参数。相反,它将在行中分配它们
换言之,在您忽略了street2
之后,您就不能为street3
提供参数
您可以显式地将未定义的传递给可选参数,如果您遗漏了一个参数,则无论如何都会发生这种情况。在您的示例中,这将是
addressCombo("LA", undefined, "LO")
另请参见
您可以使用对象来传递参数(或类似于streets:{[key:string]:string}
):
这两个答案对我都适用,但我认为被接受的答案更灵活。如果此类参数的数量增加,则通过未定义的
将变得困难且有点难看+1尽管如此,我希望它能更像C#一样工作,但让函数有一个可选参数似乎很奇怪,但无论如何,你仍然必须为每个可选参数传递一个未定义的值。
function addressCombo(streets: { street1?: string; street2?: string; street3?: string }) {
console.log("street1: " + streets.street1);
console.log("street2: " + streets.street2);
console.log("street3: " + streets.street3);
}
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