例如,我在Javascript / Typescript中获得了以下功能(真正的功能是从OpenApiGenerator生成的REST Api)
doStuffAsGet(a: string, b: string; c: string; d: string, e: string, ...)
现在,我将仅使用参数c调用该函数,其余应为未定义状态。 有没有一种方法不必只提供这个参数就写很多未定义的内容?
答案 0 :(得分:1)
可选参数-使用名称后缀?
来使参数可选:
function doStuffAsGet(a: string, b: string, c: string, d?: string, e?: string) {
}
doStuffAsGet('a', 'b', 'c');
doStuffAsGet('a', 'b', 'c', 'd');
doStuffAsGet('a', 'b', 'c', 'd', 'e');
您可以将a,b和c设为必填项,但其余选项是可选的(您可以通过适当地使用?
选择必须具有的内容)。
您也可以使用默认值-使用=
运算符指定默认值:
function doStuffAsGet(a: string, b: string, c: string, d: string = '', e: string = '') {
}
doStuffAsGet('a', 'b', 'c');
doStuffAsGet('a', 'b', 'c', 'd');
doStuffAsGet('a', 'b', 'c', 'd', 'e');
其余参数,其中使用名称前缀...
。这会将所有后续参数收集到一个数组中。
function doStuffAsGet(a: string, ...others: string[]) {
}
doStuffAsGet('a', 'b', 'c');
doStuffAsGet('a', 'b', 'c', 'd');
doStuffAsGet('a', 'b', 'c', 'd', 'e');
doStuffAsGet('a', 'b', 'c', 'd', 'e', 'f');
请注意,在上面的示例中,a
是必需的,因此您不能使用零参数来调用该函数。再次,您选择需要的和不需要的。
这些组合可以满足您的需求。
答案 1 :(得分:1)
其余参数,解构...以下示例中的所有内容:
要知道的事情:
void 0
等于undefined
...
是点差运算符[,,c]
被称为解构
function doStuffAsGet(...args) {
const [, , c] = args;
console.log(args[2], c);
}
// Way to call #1
doStuffAsGet('a', 'b', 'c', 'd', 'e');
// Way to call #2
doStuffAsGet(void 0, void 0, 'c', void 0, void 0, void 0);
// Way to call #3
doStuffAsGet(void 0, void 0, 'c');
// Way to call #4
const args = [];
for (let i = 0; i < 2; i += 1) {
args.push(void 0);
}
doStuffAsGet(...args, 'c');
// Way to call #5
doStuffAsGet(...[0, 1].map(() => void 0), 'c');
正如@Nikhil Aggarwal在评论中所说,您还可以将args变成一个对象,该对象将更易于使用和维护,例如:
function doStuffAsGet({
a,
b,
c,
d,
}) {
console.log(c);
}
function doStuffAsGetAlternative(obj) {
console.log(obj.c);
}
// Way to call #1
doStuffAsGet({
c: 'hi',
});
// Way to call #1
doStuffAsGet({
a: 'salut',
c: 'hi',
d: 'buenos dias',
});
答案 2 :(得分:0)
我会尝试使用其余运算符和传播运算符,我不知道此功能的目标,因此我无法为您提供帮助,但请查看