为什么 TSLint 和 JSLint 报告空块?

Why do TSLint and JSLint report empty blocks?

有时,我会收到 TSLint 错误 "block is empty"。这发生在例如当我将无操作回调传递给函数时:

doSomething(() => {});

据我了解,JSLint 显然也是这样做的,但我没有验证这一点。

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

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

Why does TSLint report above empty block as problem

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

更多

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

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

禁用 tslint.json

中的规则
//...
"no-empty": false,
//...

禁用文件中的规则:

/* tslint:disable:no-empty */

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

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

来自

doSomething(() => {});

doSomething(() => undefined);

代入 () => {} 表示您不关心此回调。显式类型转换将避免影响。

祝你好运。

抑制错误并指定空块是有意的方法是临时禁用规则:

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

或使其非空:

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

tslint v5.10.0 为这种情况引入了 "allow-empty-functions" 选项 "no-empty"
还有 "allow-empty-catch"(在 v5.5.0 中引入)可能有用:

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