有时,我会收到 TSLint 错误“块为空”。例如,当我将无操作回调传递给函数时,就会发生这种情况:
doSomething(() => {});
从我读到的内容来看,JSLint 显然也是这样做的,但我没有验证这一点。
我发现这些用法完全有效,所以我试图找到一个为什么空块被认为是坏的原因。但我唯一能找到的(例如在 this answer 中)是添加 return;
以避免错误的说明。这不是我想要在每个空回调中执行的操作。
为什么 TSLint 将空块上方报告为问题?有什么理由我不应该禁用检查吗?
(() => void)
类型,TSLint 也会抱怨。关于 noop:我刚刚发现 lodash 已经定义了一个:_.noop
。这是迄今为止最干净的解决方案...
void
更改为空对象。
为什么 TSLint 将空块上方报告为问题
为了防止错误。可能函数忘记填写了。推荐 () => undefined
作为 noop。
更多的
如果您想禁用它,只需将 "no-empty": false,
添加到您的 tslint.json
(全局禁用)或使用 /* tslint:disable:no-empty */
注释内联禁用它。
如果您觉得在某些情况下不想使用回调,您可以修改代码
从
doSomething(() => {});
至
doSomething(() => undefined);
将 () => {} 替换为此意味着您不关心此回调。和明确的类型转换将避免影响。
祝你好运。
与所有检查一样,您对它们是否在帮助您拥有最终判断。您可以使用以下选项之一关闭此 TSLint 检查。
禁用 tslint.json 中的规则
//...
"no-empty": false,
//...
禁用文件中的规则:
/* tslint:disable:no-empty */
如果将来某个时候您发现一个导致您出现问题的空块,您可以随时重新打开它。
一种抑制错误并指定空块是故意的方法是临时禁用规则:
// tslint:disable-next-line:no-empty
doSomething(() => {});
或使其非空:
doSomething(() => {/**/});
tslint v5.10.0 仅针对这种情况向 "no-empty"
引入了 "allow-empty-functions"
选项;
还有 "allow-empty-catch"
(在 v5.5.0 中引入)可能有用:
"no-empty": [true, "allow-empty-functions", "allow-empty-catch"]
() => undefined
。但我想这是一个品味问题。NotImplemented
。