建议
🔍检索词
- 未调用函数
- 核对
- 报表
建议
现在TS可以检测出现在条件语句中的未调用函数,我建议扩展它来检测出现在表达式中的未调用函数,其中结果是未使用的
📃激励性示例
export interface Foo {
doImportantStuff(): void;
}
declare const foo: Foo;
if (foo.doImportantStuff) { // This one is detected
...
}
[foo].forEach(x => foo.doImportantStuff); // Mistake here. The user forgot to call `doImportantStuff`
💻#用例
这是受VS代码库中的一个真实的错误的启发。
在我的脑海中,我不认为会有假阳性,但可能需要一些更多的思考,以确保
3条答案
按热度按时间g2ieeal71#
这个具体的例子在实践中是检测不到的。我们有一个函数
isSideEffectFree
,我们在其他位置使用,如逗号序列操作符。它明确地 * 不 * 认为a.b
没有副作用,因为JS getter可以而且确实有副作用,而且我们从Foo
的声明中不知道doImportantStuff
不是一个getter。aydmsdu92#
if (a.b) {}
仍然看起来有点不一致被检测为“忘记呼叫”错误,而类似的结构
[ a ].forEach(a => a.b)
不是。
waxmsbnn3#
是的,getter使这个问题很难推理。就像这个问题的一个代码示例:
著名的最后一句话,但上面的似乎并不常见。看看它在真实的世界的代码中出现的频率会很有趣