microsoft / microsoft/TypeScript

Inferred missing properties use resolved generic types rather than staying generic

Offen
#29,183 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Domain: LS: Quick Fixes Experience Enhancement Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.3.0-dev.20181212

Search Terms: declare property generic missing member

Code

class TestClass<T> {
    // Inferred:
    // otherValue: number;
    public constructor(
        public readonly value: T,
    ) { }
}


const foo = new TestClass<number>(1);

foo.otherValue = foo.value;

Expected behavior:

Declare property 'otherValue' should create otherValue: T;

Actual behavior:

...but it actually creates otherValue: number. Whatever generic type from the place you request the missing property be added will be the type of the property.

Playground Link: http://www.typescriptlang.org/play/#src=class%20TestClass%3CT%3E%20%7B%0D%0A%20%20%20%20%2F%2F%20Inferred%3A%0D%0A%20%20%20%20%2F%2F%20otherValue%3A%20number%3B%0D%0A%20%20%20%20public%20constructor(%0D%0A%20%20%20%20%20%20%20%20public%20readonly%20value%3A%20T%2C%0D%0A%20%20%20%20)%20%7B%20%7D%0D%0A%7D%0D%0A%0D%0A%0D%0Aconst%20foo%20%3D%20new%20TestClass%3Cnumber%3E(1)%3B%0D%0A%0D%0Afoo.otherValue%20%3D%20foo.value%3B%0D%0A

Related Issues: I found a lot of similar bugs but didn't see any that looked related...

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 der bereitgestellten TypeScript-Playground-Reproduktion mit typescript@next und überprüfe, ob das Verhalten weiterhin auftritt. Verfolge, wie die fehlende Eigenschaft aus der generischen Klasse und dem instanziierten Wert abgeleitet wird. Als abgeschlossen gilt die Aufgabe, wenn die deklarierte Eigenschaft den generischen Typ T beibehält, statt zu number aufgelöst zu werden, und ein Regressionstest das Beispiel abdeckt.

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.