如何安全修复 ESLint`no-fallthrough` 错误以故意忽略 switch case 的中断/返回/抛出?

问题描述 投票:0回答:3

对于我的应用程序,我想使用 switch case 模式。有些情况需要 OR 逻辑,这意味着为了简洁起见,代码中故意存在缺陷。然而,ESLint 不喜欢这样并且会抛出错误。我尝试按照文档添加评论,但这没有帮助。要重现,请尝试以下操作:

switch(num) {
  case 1:
    /*
      I also have comments in my code that explain functionality to non-developers.
    */
  case 2:
    return "if one or two";
  case 3:
    return "if three only";
}

默认设置的 ESLint 将抛出:

Error: Expected a 'break' statement before 'case'.  no-fallthrough

我如何通知 ESLint 在这段代码中特别期待异常?

我知道有多种方法可以进行不同的设计,即使用 if 语句和提前返回模式,这是我通常的方法。但是,我希望系统的这一部分对于非开发人员来说是可读的。我希望 TypeScript 和 Jest 能够让事情变得体面。

javascript typescript switch-statement eslint typescript-eslint
3个回答
4
投票

我最终采用了@dream-bold的答案,但将其应用到代码中而不是整个项目中:

/* eslint-disable no-fallthrough */
switch (num) {
  case 1:
    // falls through
  case 2:
    return "if one or two";
  case 3:
    return "if three only";
}
/* eslint-enable no-fallthrough */

2
投票

将其添加到您的 eslint 配置文件中,

...
'rules': {'no-fallthrough': ['error', {'commentPattern': 'break[\\s\\w]*omitted'}] 
...

并在您的代码中:

switch(foo) {
    case 1:
        doSomething();
        // break omitted

    case 2:
        doSomething();
}

您可以在此处阅读更多详细信息。


0
投票

以下内容应该适合您:

    switch (num) {
      case 1:
      /*
          I also have comments in my code that explain functionality to non-developers.
        */

      // eslint-disable-next-line no-fallthrough
      case 2:
        return "if one or two";
      case 3:
        return "if three only";
    }

也就是说,在失败之前提供

eslint-disable-next-line
规则,并事先提供任何解释性评论

另外,请注意this也可以工作:

    switch (num) {
      case 1:
      /*
          I also have comments in my code that explain functionality to non-developers.
        */

      // falls through
      case 2:
        return "if one or two";
      case 3:
        return "if three only";
    }

因为任何与

/falls?\s?through/i
正则表达式匹配的注释都会被视为故意失败(请参阅 https://eslint.org/docs/latest/rules/no-fallthrough

© www.soinside.com 2019 - 2024. All rights reserved.