繁体   English   中英

解决由于`no-param-ressign`和`prefer-rest-params`导致的ESLint错误

[英]Resolving ESLint error due to `no-param-reassign` and `prefer-rest-params`

我正在尝试解决下面包含的部分代码的这两个ESLint错误,但无法解决。

9   error  Assignment to property of function parameter 'opts'  no-param-reassign
10  error  Use the rest parameters instead of 'arguments'       prefer-rest-params

这是代码片段:

 8  initialize(opts) {
 9    opts.hasStar = true;
10    AbstractResultView.prototype.initialize.apply(this, arguments);
11  }

我已经为第二个错误尝试过这些,但是到目前为止还没有运气:

 8  initialize(...args, opts) {
 9    opts.hasStar = true;
10    AbstractResultView.prototype.initialize.apply(this, args);
11  }

 8  initialize(opts, ...args) {
 9    opts.hasStar = true;
10    AbstractResultView.prototype.initialize.apply(this, args);
11  }

至于第一个错误,我不知道如何解决...

应该提到这不是我的代码(我只是尝试对其进行修复),所以我可能会遗漏某些东西...

第一个错误在这里,因为在您的eslint配置中使用以下命令:

no-param-reassign: ["error", { "props": true }]

由于"props": true ,如果此对象是函数的参数,则不能重新分配对象属性。 您在这里的选择是有限的。 您可以删除该行或更改eslint配置。

有关此特定规则的更多信息: https : //eslint.org/docs/rules/no-param-reassign

您可以在此处获得有关第二个错误的更多信息: https : //eslint.org/docs/rules/prefer-rest-params

但是根据文档,您的第二个代码( initialize(opts, ...args) { )应该可以解决此问题。

尝试这个:

initialize(opts, ...args) {
    AbstractResultView.prototype.initialize.apply(
        this,
        [
            {
                ...opts,
                hasStar: true
            },
            ...args
        ]
    );
}

这将:
1.首先获取arg并更改其prop hasStar 而不修改源对象
2.传递包括修改的第一个在内的所有arg进行initialize

在第一种情况下, eslint试图避免在函数参数中进行修改,这是一种称为side effect的不良习惯。

第二种情况, eslint试图避免您在使用spread operator eslint使用参数。

错误:

initialize(opts) {
  opts.hasStar = true;
  AbstractResultView.prototype.initialize.apply(this, arguments);
}

有多种正确的方法。 我会尝试这样:

initialize(...args) {
  AbstractResultView.prototype.initialize.apply(this, args);
}

initialize(opts); // call method
opts.hasStar = true; // after assign a prop to it

所有这些都是从eslint角度来看的。 您可以禁止此警告,并根据需要继续执行代码。

最终,我找到了解决两个问题的解决方案:

 8  initialize(...args) {
 9    // with destructuring:
10    const [opts] = args;  
11    // or without desctructuring:
12    // const opts = args[0];
13    opts.hasStar = true;
14    AbstractResultView.prototype.initialize.apply(this, args);
15  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM