TypeScript 检测void表达式中出现的未调用函数

yqyhoc1h  于 2022-10-29  发布在  TypeScript
关注(0)|答案(3)|浏览(176)

建议

🔍检索词

  • 未调用函数
  • 核对
  • 报表

建议

现在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代码库中的一个真实的错误的启发。
在我的脑海中,我不认为会有假阳性,但可能需要一些更多的思考,以确保

相关问题

g2ieeal7

g2ieeal71#

这个具体的例子在实践中是检测不到的。我们有一个函数isSideEffectFree,我们在其他位置使用,如逗号序列操作符。它明确地 * 不 * 认为a.b没有副作用,因为JS getter可以而且确实有副作用,而且我们从Foo的声明中不知道doImportantStuff不是一个getter。

aydmsdu9

aydmsdu92#

if (a.b) {}仍然看起来有点不一致
被检测为“忘记呼叫”错误,而类似的结构[ a ].forEach(a => a.b)
不是。

waxmsbnn

waxmsbnn3#

是的,getter使这个问题很难推理。就像这个问题的一个代码示例:

export class Foo {
    private state = 1;

    get bar() {
        ++this.state;
        return () => this.state;
    }
}

const foo = new Foo();

[foo].forEach(x => x.bar);

著名的最后一句话,但上面的似乎并不常见。看看它在真实的世界的代码中出现的频率会很有趣

相关问题