Skip to content

A switch case of another kind of primitive is an error - #586

Merged
ASDAlexander77 merged 1 commit into
mainfrom
switch-case-type-error
Oct 17, 2026
Merged

ASDAlexander77 merged 1 commit into
mainfrom
switch-case-type-error

Conversation

@ASDAlexander77

Copy link
Copy Markdown
Owner

switch (5) { case "a": ... } compiled with no diagnostic: the switch's value was cast to the case's type (the number became a string) and compared.

Fix: a case whose type is a number, string, boolean or bigint (after literal and enum types) is an error when the switch's is another of those. It is reported at the case expression, with TypeScript's message. Unions, any, mixed enums and other types are left alone.

Repro (diagnostic-location/switch_case_type.ts):

function main() {
    const n = 5;
    switch (n) {
        case 5: print("five"); break;
        case "a": print("a"); break;   // 8:14: error: Type '"a"' is not comparable to type '5'
    }
}

ctest -C Release -j 8 --timeout 300: 100% passed, 0 failed (4092 tests on this branch).

🤖 Generated with Claude Code

`switch (5) { case "a": ... }` compiled with no diagnostic: the switch's
value was cast to the case's type (the number became a string) and
compared. TypeScript rejects a case whose type is not comparable to the
switch's; tslang now rejects a case that is a number, string, boolean
or bigint when the switch is another of those, at the case expression,
with TypeScript's message. Unions, any, enums of mixed members and
other types are left as they were.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ASDAlexander77
ASDAlexander77 merged commit 2e12657 into main Oct 17, 2026
2 checks passed
@ASDAlexander77
ASDAlexander77 deleted the switch-case-type-error branch October 17, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant