microsoft / microsoft/TypeScript

Type not narrowed by === when equivalent type guard works

Offen
#36,772 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: check: Control Flow Rescheduled
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

TypeScript Version: 3.7.5, also tested on 3.9.0-dev.20200212

Search Terms: equals, type guard, type parameter, narrowing

Code

type AorB = 'a' | 'b';

function isA(t: AorB): t is 'a' {
  return t === 'a';
}

function test<T extends AorB>(arg: T) {
  if (isA(arg)) {
    let a1: T & 'a' = arg; // ok
  }
  if (arg === 'a') {
    let a2: T & 'a' = arg; // error
  }
}

Expected behavior: The condition arg === 'a' should narrow the type of arg to T & 'a' in the second if block, in the same way as the equivalent type guard function does.

Actual behavior: The type of arg is not narrowed in the second if block.

Playground Link: Playground Link

Related Issues: N/A

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

Beginne damit, das Verhalten von TypeScript 3.7.5 oder 3.9.0-dev.20200212 aus dem TypeScript-Snippet des Issues zu reproduzieren, und vergleiche dabei die direkte Gleichheitsprüfung mit dem äquivalenten Type Guard. Verfolge die Behandlung der Typverengung für generische Typparameter durch den Compiler; abgeschlossen ist die Aufgabe, wenn arg === 'a' erlaubt, arg ohne Fehler T  'a' zuzuweisen.

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
38/100

Neue Issues direkt in Ihr Postfach

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