【问题标题】:Why do TSLint and JSLint report empty blocks?为什么 TSLint 和 JSLint 报告空块?
【发布时间】:2023-03-23 03:08:01
【问题描述】:

有时,我会收到 TSLint 错误“块为空”。发生这种情况,例如当我将无操作回调传递给函数时:

doSomething(() => {});

根据我的阅读,JSLint 显然也是如此,但我没有验证。

我发现这些用法完全有效,所以我试图找到一个为什么空块被认为是坏的原因。但我唯一能找到的(例如在this answer 中)是添加return; 以避免错误的说明。这不是我想在每个空回调中做的。

为什么 TSLint 将空块上方报告为问题?我有什么理由不应该禁用检查?

【问题讨论】:

  • 从未使用过;只是大声思考:TSLint 抱怨的时间可能是它认为函数应该返回一个值而你的无操作函数没有这样做吗?您也许可以定义一个显式的无操作函数,并在这种调用中传递它的名称。
  • @TripeHound 不,即使我为回调指定了显式类型的 (() => void),TSLint 也会抱怨。关于 noop:我刚刚发现 lodash 已经定义了一个:_.noop。这是迄今为止最干净的解决方案...
  • @danwellman 是的,但这会将返回类型从 void 更改为空对象。
  • 空函数报错如下:stackoverflow.com/a/70746269/7680511
  • 空函数报错如下:stackoverflow.com/a/70746269/7680511

标签: typescript jslint tslint


【解决方案1】:

为什么 TSLint 将空块上方报告为问题

为了防止错误。可能函数忘记填写了。推荐() => undefined作为noop。

更多

如果您想禁用它,只需将"no-empty": false, 添加到您的tslint.json(全局禁用)或使用/* tslint:disable:no-empty */ 注释内联禁用它。

【讨论】:

  • 我想我不想让 TSLint 告诉我我错过了填写函数体,这就是我要测试的内容。因此,如果此检查确实没有其他用处,我宁愿禁用它,也不愿在每个回调中使用() => undefined。但我想这是一个品味问题。
  • 澄清一下,你能具体说明你所说的“错误”是什么意思吗?只是空函数体吗?
  • 就像 basarat 说的,一个错误可能是你忘记实现某些东西,尽管按照惯例,你希望有一天实现的每个函数在使用时都应该抛出 NotImplemented
【解决方案2】:

与所有检查一样,您对它们是否帮助您拥有最终判断。您可以使用以下选项之一关闭此 TSLint 检查。

禁用 tslint.json 中的规则

//...
"no-empty": false,
//...

禁用文件中的规则:

/* tslint:disable:no-empty */

如果将来某个时候您发现一个给您带来问题的空块,您可以随时重新打开它。

【讨论】:

    【解决方案3】:

    一种抑制错误并指定空块是故意的方法是暂时禁用规则:

    // tslint:disable-next-line:no-empty
    doSomething(() => {});
    

    或者让它非空:

    doSomething(() => {/**/});
    

    【讨论】:

    • 第二个建议似乎很不合适。
    【解决方案4】:

    如果您觉得在某些情况下不想使用回调 你可以修改代码

    来自

    doSomething(() => {});
    

    doSomething(() => undefined);
    

    将 () => {} 替换为 this 表示您不关心此回调。并且显式类型转换将避免影响。

    祝你好运。

    【讨论】:

      【解决方案5】:

      tslint v5.10.0 仅针对这种情况将"allow-empty-functions" 选项引入"no-empty"
      "allow-empty-catch"(在 v5.5.0 中引入)也可能有用:

      "no-empty": [true, "allow-empty-functions", "allow-empty-catch"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-22
        • 2017-10-16
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        相关资源
        最近更新 更多