Как получить предупреждение линтера / компилятора при сравнении функции без вызова? - PullRequest
0 голосов
/ 22 января 2019

Я слишком часто допускаю эту добрую ошибку при написании машинописного кода:

class Foo {
  constructor() { }
  public get isFoo(): boolean { return true; } // getter
  public isBar(): boolean { return false; } // normal function
}

let foo = new Foo();
if (foo.isFoo) { // this is ok, getter returns true
  console.log("it is foo");
}
// and here comes the mistake:
if (foo.isBar) { // <- isBar is defined, forgot to write ()
  console.log("it is bar"); // this happens also 
}

Возможно ли получить какое-то предупреждение от tslinter или компилятора за такую ​​ошибку?

1 Ответ

0 голосов
/ 22 января 2019

Это не возможно, синтаксис в вашем условном выражении действителен на 100%

В некоторых случаях вам нужно проверить объявление метода в условном выражении и запустить некоторый блок кода.

Например:

class Foo {
  public isFoo(): boolean {
    return true;
  }
  public get isBar(): boolean {
    return false;
  }
}

const fooInstance: Foo = new Foo();

if (foo.isFoo) {
  console.log('Foo class has method isFoo');
}

if (!foo.isXyz) {
  console.log('Foo class does not have method isXyz');
}

const fooMethod: () => boolean = foo.isFoo; // this is also valid syntax

Ни один линтер или компилятор не выдаст ошибку ни для одного из двух сценариев в приведенном выше примере.

...