microsoft / microsoft/TypeScript

keyof of 'mixed' class equals to `string | number`

Offen
#31,143 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

TypeScript Version: 3.4.3 or 3.5.0-dev.20190427

Search Terms: keyof, anonymous class

Code

type AnyClass = new (...args: any[]) => any;

const mixin = <T extends AnyClass>(Class: T) => class extends Class {a: string};
const Cl = mixin(class {b = 123});
const inst = new Cl();

inst. //  <- IntelliSense works fine here and suggests 'a' and 'b' properties

type Keys = keyof typeof inst; // Keys = string | number

Expected behavior:
Keys to be equal to 'a' | 'b'

Actual behavior:
Keys to be equal to string | number

Playground Link: ts-playground

Description:
I'm sorry if that is a known bug ot expected behaviour. I did not find a duplicate.
Class C is a result of extension of some other class A provided as a function argument and class B which is declared inside the function body. Such class C works fine for the most part, but keyof InstanceType<typeof C> returns string | number.

image

While IntelliSense works fine:
image

I'll be glad if you suggest any workarounds for this issue.

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 Beispiel im verlinkten TypeScript Playground mit den gemeldeten Versionen zu reproduzieren, und bestätige den inferierten Typ von keyof typeof inst. Verfolge die Verarbeitung von keyof durch den Compiler für die gemischte anonyme Klasse und füge Testabdeckung für das Beispiel hinzu, sodass das Ergebnis 'a' | 'b' statt string | number ist.

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

Neue Issues direkt in Ihr Postfach

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