microsoft / microsoft/TypeScript

Assertion call in optional chain should not narrow variable

Offen
#42,168 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

TypeScript Version: 4.1.3

Search Terms: assert optional call

Expected behavior:

No narrowing of v.
Maybe an error indicating that assertion calls don't work with optional chaining.

Actual behavior:

Assertion call narrows v. If strictNullChecks is enabled, it works as expected.

Related Issues:

Code

// @strictNullChecks: false
declare const obj: {
  assert?(v: any): asserts v;
}

declare const v: boolean;
obj.assert?.(v);
v; // should not be narrowed to 'true'
Compiler Options
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "alwaysStrict": true,
    "esModuleInterop": true,
    "declaration": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "moduleResolution": 2,
    "target": "ES2017",
    "jsx": "React",
    "module": "ESNext"
  }
}

Playground Link: Provided

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 mit dem bereitgestellten Playground Link und reproduziere das Beispiel für einen optionalen Assertion-Aufruf mit deaktiviertem strictNullChecks, wobei du die beobachtete Narrowing mit dem erwarteten Verhalten vergleichst. Verfolge das Control-Flow-Narrowing des Compilers für optionale Aufrufe; abgeschlossen ist die Aufgabe, wenn v nach obj.assert?.(v) nicht eingeengt wird oder die nicht unterstützte Kombination diagnostiziert wird.

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
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

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