当我尝试测试函数返回的值时,我经常被绊倒(通常是通过自动完成)。有时我忘记在其末尾添加()
,因此它总是返回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,因此我愿意接受任何可能会警告我这个问题的绒毛。
答案 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()) {}