microsoft / microsoft/TypeScript

switch-true case-true narrowing not equivalent to default case.

Offen
#59,133 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Domain: check: Control Flow Help Wanted Possible Improvement
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

🔎 Search Terms

"switch true" "switch-true" switch true narrowing. Most issues that turned up were from 2023 which I think precedes the release of the switch-true type narrowing feature?

🕗 Version & Regression Information
  • This is a gap
⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.6.0-dev.20240703&ssl=22&ssc=1&pln=12&pc=1#code/GYVwdgxgLglg9mABHA1gQwJ4AoZgA4hQBciAzlAE64DmAlIiQEQCCjAPowELuMDCjiAN4AoRGLIB3GFAgALRFkogApvRHiNiCGlLLEAejT6AdFGXkc+QrSKjN9isqggKSFowDcd+9t0GARiZmFrgEUDbe9uKOzq6IXJ6RGgAmysBoIAA2xElRMS5u-F4aAL7CZcKgkLAIiCCycLKWYSTkVGB0DPGsHNwc-EKRpFIy8ooUKmq5Yr56hkHmUM3WtlGa+XHuxVGzAQshVuGra9FOBfHc2z46ekrKxyeIG4WJpeXCQA

💻 Code
function uhoh(input: string) : "A"|"B"|"C" {
    switch (true) {
        case /a/.test(input):
            return "A";
        case /b/.test(input):
            return "B";
        case true: // <--- default: works fine here
            return "C";
    }
}
🙁 Actual behavior

Complains that the result of uhoh could be undefined.

🙂 Expected behavior

switch(true) { case true: } should behave like switch(true) { default: }, probably?

Additional information about the issue
image

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Verwende das verlinkte TypeScript Playground-Beispiel als Ausgangsreproduktion. Verfolge, wie switch(true) den abschließenden Fall true im Vergleich zu default behandelt, und überprüfe anschließend, dass die Funktion undefined nicht mehr zulässt und dabei die Ergebnisse A/B/C beibehält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.