Is there a way to force "if" to only accept boolean in TypeScript?

The compiler does not do it and I won't expect it to do it any time soon. It has been asked and rejected a number of times. The cases I could find:

  • Feb 2016: https://github.com/Microsoft/TypeScript/issues/7306
  • Apr 2016: https://github.com/Microsoft/TypeScript/issues/8178
  • Jul 2016: https://github.com/Microsoft/TypeScript/issues/9702

In each cases, the reasoning for closing these issues without changing the compiler was that it would be too radical a change, and that really a linter should do this job.

The good news is that a new rule has recently been merged into tslint's codebase to provide warnings about this problem. As far as I can tell, though, the rule is not yet in a released version of tslint. Once it is released, if you set strict-boolean-expressions to true in your tslint rules, then tslint will warn you when you use a conditional with an expression that is not strictly boolean.


I came across a similar issue and found the strict-boolean-expressions rule. Not the perfect answer for the example given by the OP, but might be helpful for others.

Activating this rule causes expressions like

if (nonBooleanCondition) {

to display the following warning:

This type is not allowed in the 'if' condition because it is a [TYPE]. Only booleans are allowed.

Tags:

Typescript