8000 Enhancement: [switch-exhaustiveness-check] prevents use of switch statement with non-unions types · Issue #11859 · typescript-eslint/typescript-eslint · GitHub
[go: up one dir, main page]

Skip to content

Enhancement: [switch-exhaustiveness-check] prevents use of switch statement with non-unions types #11859

@salisbury-espinosa

Description

@salisbury-espinosa

Before You File a Proposal Please Confirm You Have Done The Following...

My proposal is suitable for this project

  • I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).

Link to the rule's documentation

https://typescript-eslint.io/rules/switch-exhaustiveness-check/

Description

option: disableSwitchForNonUnion: boolean
I think it makes sense to add an option to disable switch for "infinite" types:

const value: number = Math.floor(Math.random() * 3);

switch (value) {
  case 0:
    break;
  case 1:
    break;
}

Because if they exist, it's a reason to review this piece of code or explicitly flag it by disabling the rule in a comment, to highlight that an "infinite" type check is in (// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check)

Fail

const value: number = Math.floor(Math.random() * 3);

switch (value) {
  case 0:
    break;
  case 1:
    break;
}

Pass

const value: number = Math.floor(Math.random() * 3);

// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
switch (value) {
  case 0:
    break;
  case 1:
    break;
}

or

const value = Math.floor(Math.random() * 3) as 0 | 1 | 2;

switch (value) {
  case 0:
    break;
  case 1:
    break;
  case 2:
    break;
}

Additional Info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    awaiting responseIssues waiting for a reply from the OP or another partyenhancement: plugin rule optionNew rule option for an existing eslint-plugin rulepackage: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0