microsoft / microsoft/TypeScript

Type of heterogeneous enum value can't be inferred correctly when used in object literal

Offen
#33,439 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: enum
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.5.3

Search Terms:
heterogeneous enum value type

Code

const enum Heterogeneous {
  Foo = 1,
  Bar = 'zzz',
}

var a1: string = Heterogeneous.Bar; // <= OK. no error.
var a2: {name: string} = {name: Heterogeneous.Bar}; // <= Type 'Heterogeneous' is not assignable to type 'string'.

var b1: Heterogeneous = Heterogeneous.Bar; // Type of 'b1' is 'Heterogeneous'.
var b2 = {name: b1}; // Type of 'b2' is still inferred as '{name: Heterogeneous.Bar;}'
var b3: {name: string} = {name: b1}; // OK. 'Heterogeneous.Bar' is assignable to 'string'.

Expected behavior:
no error.
Actual behavior:
var a2: {name: string} = {name: Constants.Bar}; // <= Type 'Constants' is not assignable to type 'string'.ts(2322)

I often use a heterogeneous const enum as a constant provider, for compile time optimizing.
Specifying the string type literal explicitly will work, like:

var a2: {name: string} = {name: <string>Heterogeneous.Bar};

but it looks verbose.

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 gemeldete Verhalten von TypeScript 3.5.3 mit den heterogenen const enum- und Objektliteral-Beispielen aus dem Issue zu reproduzieren. Vergleiche die inferierten Typen und Zuweisungsfehler für ein direktes enum-Mitglied, eine annotierte Variable und ein inferiertes Objekt; als erledigt gilt, dass die direkte Objektliteral-Zuweisung das Member mit Stringwert ohne explizite Typassertion akzeptiert und das bestehende Inferenzverhalten korrekt bleibt.

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.