microsoft / microsoft/TypeScript

Suggestion: consolidate generics in union if they match

Offen
#31,955 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.5.2

Search Terms: rxjs startWith generics union consolidate same

Code

declare const create: <T>(
    t: T,
) => {
    startWith: <D>(v1: D) => T | D;
};

// Succeeds
// $ExpectType { foo: number } | { bar: number }
const r1 = create({ foo: 1 }).startWith({ bar: 1 });

// Fails
// $ExpectType { foo: number }
// Actual: { foo: number } | { foo: number }
const r2 = create({ foo: 1 }).startWith({ foo: 1 });

Although the expected/actual types are compatible, it's slightly irritating to deal with a union type T | T instead of a consolidated type T, as it makes type inspection in VS Code much more difficult (especially when the types are large or deeply nested).

Real world use case: https://github.com/ReactiveX/rxjs/issues/4866

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 bereitgestellte create/startWith-Beispiel mit TypeScript 3.5.2 zu reproduzieren, und untersuche die inferierten Typen für r1 und r2. Untersuche den für Vereinigungen identischer generischer Ergebnisse verantwortlichen Typprüfpfad; abgeschlossen ist die Aufgabe, wenn die entsprechende Vereinigung als einzelner Typ dargestellt wird, ohne den Fall einer unterschiedlichen Vereinigung zu ändern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
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.