Skip to content

Apply uncalled function checks to ternaries #36048

Description

Search Terms

ts2774 ternary condition error function called uncalled

Suggestion

TS2774 (implemented in #32802), i.e. the "This condition will always return true since the function is always defined. Did you mean to call it instead?" error, provides a helpful hint for developers referencing a function in an if statement without calling it. However, the same check doesn't apply to ternaries, which is missing an opportunity to save some debug time and counterintuitive for devs who know about TS2774. I propose reusing TS2774 for developers who forget to call a function in a ternary.

Examples

Now:

const isString = (value: unknown) => typeof value === "string"

// Error (TS2774)
if (isString) {
}
// No error
isString ? true : false

If this suggestion is adopted:

const isString = (value: unknown) => typeof value === "string"

// Error (TS2774)
if (isString) {
}
// Error(TS2774)
isString ? true : false

Checklist

My suggestion meets these guidelines:

  • [✔️] This wouldn't be a breaking change in existing TypeScript/JavaScript code
  • [✔️] This wouldn't change the runtime behavior of existing JavaScript code
  • [✔️] This could be implemented without emitting different JS based on the types of the expressions
  • [✔️] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
  • [✔️] This feature would agree with the rest of TypeScript's Design Goals.

Activity

  1. RyanCavanaugh commented on Jan 7, 2020

    @RyanCavanaugh
    Member

    Seems reasonable; we'd have to assess for breakage but I suspect this would turn out well

  2. dragomirtitian commented on Jan 21, 2020

    @dragomirtitian
    Contributor

    Ryan Cavanaugh (@RyanCavanaugh) Are you taking PRs on this one?

  3. changed the title [-]Apply TS2774 to ternaries[/-] [+]Apply uncalled function checks to ternaries[/+] on Jan 21, 2020
  4. DanielRosenwasser commented on Jan 21, 2020

    @DanielRosenwasser
    Member

    Yes

  5. DanielRosenwasser commented on Jan 28, 2020

    @DanielRosenwasser
    Member

    Just assigning Nathan Shively-Sanders (@sandersn) so that we can follow up on the PR for 3.9 sooner rather than later.

  6. DanielRosenwasser commented on Feb 20, 2020

    @DanielRosenwasser
    Member
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Breaking ChangeWould introduce errors in existing codeEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Help WantedYou can do thisSuggestionAn idea for TypeScriptUpdate Docs on Next ReleaseIndicates that this PR affects docs

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions