Mam następującą klasę (encja dla TypeOrm):
class Foo {
bar: Promise<Bar>;
test() {
if (!this.bar) throw new Error();
}
}
Metoda test nigdy nie wyrzuci wyjątku. Dlaczego? Ponieważ TypeOrm zawsze przypisze wartość (obiekt promise, który może coś zwrócić bądź nie) do bar. Problem polega na tym, że zapomniałem await w if. Powinno być:
if (!(await this.bar)) throw new Error();
Teraz kod będzie działał zgodnie z oczekiwaniami. Jeśli encja Foo nie ma żadnej wartości pod kluczem obcym bar to zostanie wyrzucony wyjątek.
Szukam reguły ESLint, która zabezpieczy mnie przed takimi pomyłkami (zapominaniem await w if). Niestety @typescript-eslint/no-floating-promises zdaje się nie działać w tym przypadku.