我想做类似的事情:
module.exports = (obj) => {
if (arguments.length > 1) {
throw new Error('Must only pass in single argument');
}
}
当我记录参数时,我得到关于模块本身的元数据,并且看不到传入的参数。有没有办法可以检查是否传入了其他参数?
这是我的测试:
it('should reject multiple arguments', () => {
expect(fn({ data: 1}, { data: 2})).to.throw(Error, 'Too many inputs');
});
答案 0 :(得分:1)
arguments
不适用于ES6箭头功能。
试试这个...args
function f(a, b, ...args) {
}
来源:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters
答案 1 :(得分:1)
如MDN's page on arrow function所述:
箭头函数表达式的语法短于函数表达式,并且不绑定自己的
this
,arguments
,super
或{{1 }}
换句话说,要检查箭头函数是否获得的参数多于预期,使用new.target
不起作用(就像使用普通函数一样),所以你应该使用rest parameters:< / p>
arguments
答案 2 :(得分:0)
正如其他人提到的,箭头功能是导致问题的原因。
但是,在这种情况下,使用rest args不是一个很好的解决方案,以便正确定义您的API。
为了保持与你想要的兼容(显示该函数只有一个参数),你应该这样做:
module.exports = function (obj) {
if (arguments.length > 1) {
throw new Error('Must only pass in single argument');
}
}
在你的箭头函数中,参数实际上与你不期望的东西联系在一起。 请参阅https://github.com/unional/some-issues/tree/so-arrow-arguments了解其实际情况。