为什么TSLint和JSLint报告空块?

the*_*Dmi 34 jslint typescript tslint

有时,我得到TSLint错误"块是空的".例如,当我将无操作回调传递给函数时,会发生这种情况:

doSomething(() => {});
Run Code Online (Sandbox Code Playgroud)

从我读到的,JSLint显然也是这样,但我没有验证.

我发现这些用法完全有效,所以我试图找出为什么空块被认为是坏的原因.但我唯一能找到的东西(例如在这个答案中)是添加a return;以避免错误的指令.这不是我想要在每个空回调中做的事情.

为什么TSLint报告上面的空块是问题?我有什么理由不禁用支票吗?

bas*_*rat 60

为什么TSLint报告上面的空块是问题

为了防止错误.也许这个功能被遗忘了.推荐() => undefined为noop.

更多

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

  • 我想我不希望 TSLint 告诉我我错过了填写函数体,这就是我要测试的内容。所以如果这个检查真的没有其他有用的东西,我宁愿禁用它而不是在每个回调中使用`() => undefined`。但我想这是一个品味问题。 (3认同)
  • 就像 basarat 所说的那样,一个错误可能是您忘记了实现某些东西,尽管按照惯例,您希望有一天实现的每个功能都应该在使用时抛出“NotImplemented”。 (2认同)

Fen*_*ton 13

与所有支票一样,您可以最终判断他们是否在帮助您.您可以使用以下选项之一关闭此TSLint检查.

禁用tslint.json中的规则

//...
"no-empty": false,
//...
Run Code Online (Sandbox Code Playgroud)

禁用文件中的规则:

/* tslint:disable:no-empty */
Run Code Online (Sandbox Code Playgroud)

如果将来某个时候发现导致问题的空块,您可以随时重新打开它.


Est*_*ask 10

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

// tslint:disable-next-line:no-empty
doSomething(() => {});
Run Code Online (Sandbox Code Playgroud)

或者让它非空:

doSomething(() => {/**/});
Run Code Online (Sandbox Code Playgroud)

  • 第二个建议似乎很不合适。 (6认同)

spa*_*dev 7

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

doSomething(() => {});
Run Code Online (Sandbox Code Playgroud)

doSomething(() => undefined);
Run Code Online (Sandbox Code Playgroud)

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

祝你好运。


Tom*_*rga 7

tslint v5.10.0引入了专门针对这种情况"allow-empty-functions"的选项"no-empty"
另外"allow-empty-catch"(在v5.5.0中引入)可能有用:

"no-empty": [true, "allow-empty-functions", "allow-empty-catch"]
Run Code Online (Sandbox Code Playgroud)