EsLint - 抑制"不要使用'新'副作用"

28 eslint

我看到用jsLint压制这个的方法,尝试过,它没有用.

我需要'new'关键字或我的脚本不起作用.

我怎样才能在.eslintrc中压制它?

非常感谢

更新:按照约旦的要求. [请注意我的应用程序是用ReactJs编写的]

 // 3rd party 
 const AnimateSlideShow = require('../js-animation');

 export default class Animate extends React.Component {

   .......

    fetchJsAnimation() {
      const animation = this.refs.Animation;
      new AnimateSlideShow(animation);
    }
   ......
  }
Run Code Online (Sandbox Code Playgroud)

错误:不要将'new'用于副作用no-new

现在,如果我满足EsLint,我的应用程序就会崩溃:

未捕获(在承诺中)TypeError:无法设置未定义的属性'_handleMouse'(...)

Jor*_*ing 62

以下是有问题的ESLint规则的文档:http://eslint.org/docs/rules/no-new.html

禁止new副作用(no-new)

使用new构造函数的目的通常是创建特定类型的对象并将该对象存储在变量中,例如:

var person = new Person();
Run Code Online (Sandbox Code Playgroud)

使用new而不存储结果不太常见,例如:

new Person();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,创建的对象被抛弃,因为它的引用不存储在任何地方,并且在许多情况下,这意味着应该用不需要new的函数替换构造函数.

我粘贴上面的内容是因为我认为了解规则的意图是什么很重要,而不仅仅是如何让它消失.

如果找不到摆脱的方法new,可以使用eslint-disable指令抑制此错误:

fetchJsAnimation() {
  /* eslint-disable no-new */
  const animation = this.refs.Animation;
  new AnimateSlideShow(animation);
}
Run Code Online (Sandbox Code Playgroud)

ESLint指令是块作用域的,因此它将仅在此函数内被抑制.您还可以使用eslint-disable-line指令在单行上禁止规则:

new AnimateSlideShow(animation); // eslint-disable-line no-new
Run Code Online (Sandbox Code Playgroud)

如果您确实需要为整个项目禁用此规则,那么在您.eslintrc"rules"部分中将此规则的值设置为0:

{
  // ...
  "rules": {
    "no-new": 0,
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

您也可以通过将其设置为1(2是错误)使其成为警告而不是错误.


sar*_*oka 10

尝试将您的功能覆盖到 anonim 功能中

(()=>code)();
Run Code Online (Sandbox Code Playgroud)

在你的例子中

fetchJsAnimation() {
  const animation = this.refs.Animation;
  (()=>new AnimateSlideShow(animation))();
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用这种模式,例如现代 javascript 框架。vuejs vue 这里是一个例子

(() => new Vue({ 
    el: '#app', 
    router, 
    store, 
    components: { App }, 
    template: '<App/>' 
}))();
Run Code Online (Sandbox Code Playgroud)