microsoft / microsoft/TypeScript

Regression in `asserts` behavior modifying type of `this`

Offen
#55,063 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Needs Investigation
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Bug Report

🔎 Search Terms

asserts regression

🕗 Version & Regression Information
  • This changed between versions 4.9.5 and 5.0.4
⏯ Playground Link

Playground link with relevant code

💻 Code
export class Set<S extends number[] = []> {
  insert<_>(x: any): asserts this is Set<[...S, 0]> {}
}

const y: Set = new Set();
y.insert(6);
y
//^?
y.insert(6);
y
//^?
🙁 Actual behavior

In 5.0.4

//^? const y: Set<[]>
//^? const y: Set<[]>
🙂 Expected behavior

In 4.9.5

//^? const y: Set<[0]>
//^? const y: Set<[0,0]>

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 verlinkten TypeScript Playground und vergleiche das gemeldete Verhalten in den Versionen 4.9.5 und 5.0.4. Untersuche, wie die asserts-Methode den Typ von this über aufeinanderfolgende insert-Aufrufe hinweg ändert. Als erledigt gilt die Aufgabe, wenn das Beispiel y nach dem ersten Aufruf auf Set\u003c[0]\u003e und nach dem zweiten auf Set\u003c[0,0]\u003e eingrenzt.

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

Neue Issues direkt in Ihr Postfach

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