数组或未定义或默认数组作为函数的参数

2024-03-23

我想将一个数组选择性地传递给一个函数或一个将其设置为默认值的数组。

这是典型的方式:function myfunc(...values : Array<number>)

我知道我可以这样做,但我不知道如何设置它以允许此函数调用:

myfunc()
myfunc(1)
myfunc(1,2)
myfunc([1, 2])

如上所述,除了 myfunc() 之外的所有内容都受支持。我怎样才能做到呢?


您可以定义两个重载,然后在单个函数中指定逻辑。像下面这样的东西应该有效。

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 https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABAWwJ6kgCgHS4G4CGANiAKYDOiAXIgIIBO9BqAPGCMgEan0B8AlDXZceAbgBQGaPCRopmQiQrU6jZmw7c+gxMK0TJ4aQhTojC4mRWYGTVnp69EAH12ae-ADSJc2RWUoaW3UHbSF3ekQAb3FEOMQYYERMKFQAB1I4JP9SRABeAsQAclCi-mjY+Kqc8mxwcgALRKgLJX4JKoBfRFIiclzE5Jz8wvAAE1JgGDBSMfKYqurLZTzEAG0AXQ747t7+isX4mvzEHO24zvFKuIB6G8QiOABzGAgrqvpSKBB6JBrsIikMBPKANCSXcRycztRB3RAQOCMUjQSFmLAARhhcIRSJRUIx3gATFj7jjPni0RBMGt0USNiT4YjyVBUfJaYhCd4AMzeAAsDLJyJZ+KpNKJ3PpolhpKZQvEcJF1PZnMQPMQvI23gArN4AGwMnj0RHy+6KsUczXrNUag2MY3iBFgchwQEA56YRXK7n8cpwrkOhDO12PJ4eylK8Wq+m++5coA。我们必须在这里检查未定义的情况,因为转译的 JavaScript 没有考虑不同的函数重载,而是提供了一个单一的实现,其中value可以是未定义的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组或未定义或默认数组作为函数的参数 的相关文章

随机推荐