数组或未定义或默认数组作为函数的参数
Either Array or undefined or default array as argument to function
我想选择性地将数组传递给函数或将数组设置为默认值。
这是典型的方式:
function myfunc(...values : Array<number>)
我知道我可以这样做,但我不知道如何设置它以允许此函数调用:
myfunc()
myfunc(1)
myfunc(1,2)
myfunc([1, 2])
以上,除了 myfunc() 之外的所有都被支持。我怎样才能做到?
能不能简单的这么用!!!
function a(k = []) {
console.log(k)
}
a();
a(1);
a([1]);
a([1, 2, 3]);
这里是:
function myfunc(...values : Array<number> | [Array<number>]) {}
myfunc()
myfunc(1)
myfunc(1,2)
myfunc([1, 2])
myfunc('invalid')
myfunc([1, 2], [3, 4])
这是一个preview,您可以在其中查看结果。
您可以定义两个重载,然后在单个函数中指定逻辑。像下面这样的东西应该可以工作。
function myfunc(...values : Array<number>): number;
function myfunc(values : Array<number>): number;
function myfunc(value : (Array<number> | number), ...values : Array<number>): number {
if (typeof value === 'number') {
values.unshift(value);
} else if (value === undefined) {
values = [];
} else {
values = value;
}
// logic
return values.length;
}
myfunc(); // correct
myfunc(1); // correct
myfunc(1, 2); // correct
myfunc([1, 2]); // correct
myfunc(1, 2, 3, 4); // correct
myfunc([1, 2, 3]); // correct
// myfunc([1, 2, 3, 4], 5, 6); // error
// myfunc([1, 2], [3, 4]); // error
console.log(myfunc(1, 2, 3)) // 3
console.log(myfunc([1, 2, 3])) // 3
请注意,因为我们没有为后跟值的数组定义接口,所以最后一个示例导致错误,我认为这是预期的行为。可以看到一个例子here。我们必须在这里检查未定义,因为转译后的 JavaScript 没有考虑不同的函数重载,而是提供了一个单独的实现,其中 value
可以是未定义的。
我想选择性地将数组传递给函数或将数组设置为默认值。
这是典型的方式:
function myfunc(...values : Array<number>)
我知道我可以这样做,但我不知道如何设置它以允许此函数调用:
myfunc()
myfunc(1)
myfunc(1,2)
myfunc([1, 2])
以上,除了 myfunc() 之外的所有都被支持。我怎样才能做到?
能不能简单的这么用!!!
function a(k = []) {
console.log(k)
}
a();
a(1);
a([1]);
a([1, 2, 3]);
这里是:
function myfunc(...values : Array<number> | [Array<number>]) {}
myfunc()
myfunc(1)
myfunc(1,2)
myfunc([1, 2])
myfunc('invalid')
myfunc([1, 2], [3, 4])
这是一个preview,您可以在其中查看结果。
您可以定义两个重载,然后在单个函数中指定逻辑。像下面这样的东西应该可以工作。
function myfunc(...values : Array<number>): number;
function myfunc(values : Array<number>): number;
function myfunc(value : (Array<number> | number), ...values : Array<number>): number {
if (typeof value === 'number') {
values.unshift(value);
} else if (value === undefined) {
values = [];
} else {
values = value;
}
// logic
return values.length;
}
myfunc(); // correct
myfunc(1); // correct
myfunc(1, 2); // correct
myfunc([1, 2]); // correct
myfunc(1, 2, 3, 4); // correct
myfunc([1, 2, 3]); // correct
// myfunc([1, 2, 3, 4], 5, 6); // error
// myfunc([1, 2], [3, 4]); // error
console.log(myfunc(1, 2, 3)) // 3
console.log(myfunc([1, 2, 3])) // 3
请注意,因为我们没有为后跟值的数组定义接口,所以最后一个示例导致错误,我认为这是预期的行为。可以看到一个例子here。我们必须在这里检查未定义,因为转译后的 JavaScript 没有考虑不同的函数重载,而是提供了一个单独的实现,其中 value
可以是未定义的。