Skip to content

Disallow truthiness coercions on known-true/known-false values #9041

Closed
@RyanCavanaugh

Description

@RyanCavanaugh

Inspired by #7746 but making a new issue for clarity

Bad code:

function func(): boolean { return Math.random() > 0.5; }
if (func) {
  // oops, meant to write func()
}

Change: Under --strictNullChecks, it becomes an error to use an expression in a truthiness position unless the type of the expression is possibly-falsy

Possibly-falsy types are:

  • any
  • The primitives: string, string literal types, number, enum types, and boolean
  • Type parameters
  • Union types containing possibly-falsy types
  • An intersection type where any member is possibly falsy

A truthiness position is:

  • The test expression of an if, while, or do/while
  • The middle expression of a for
  • The first operand of ?, && or ||
  • The operand of !

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions