在检查功能值而不是返回值时显示警告

时间:2019-09-20 16:20:12

标签: javascript typescript visual-studio-code

当我尝试测试函数返回的值时,我经常被绊倒(通常是通过自动完成)。有时我忘记在其末尾添加(),因此它总是返回true。

class Foo {
    public bar(): boolean {
        // return either true or false based on some logic
    }
}
let foo = new Foo();
if (foo.bar) {
    // UNINTENDED
    // always returns true due to "foo.bar" being a function object
}

if (foo.bar()) {
    // INTENDED
    // may return true or false depending on logic of "foo.bar"
}

使用前者时是否有任何方式可以得到通知/警告?调试时,并非总是会因为我错过了函数调用而很难指出问题所在。另外,还有更好的方法编写代码来避免此问题吗?

我正在使用VS Code,因此我愿意接受任何可能会警告我这个问题的绒毛。

2 个答案:

答案 0 :(得分:1)

我可以想到几件事。首先,您可以尝试使用短绒。 TSLint有一个名为strict-boolean-expressions的选项,我认为它将满足您的要求。其次,您可以将这样的方法放入吸气剂中。

答案 1 :(得分:1)

如果可以将bar用作属性获取器,则可以将其合并为一个。这样做可以为Typescript提供指出错误用法所需的信息。

找到一个可以满足您要求的TSLint标志可能会很尴尬。这样做if (obj.someFunction) {完全有效,并且在Javascript中使用了大量代码来测试函数调用。

进入房产并不难。

例如

class test {
    get bar(): boolean {
        return true;
    }
}

var a = new test();

//This is OK.
if (a.bar) {}

//ERROR: Cannot invoke an expression whose type lacks a 
//call signature.
if (a.bar()) {}