microsoft / microsoft/TypeScript

chained generic mixins fail

Offen
#28,594 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

TypeScript Version: 3.2.0-dev.201xxxxx

Search Terms: chained generic mixins

Code

type Constructor<T> = new(...args: any[]) => T;

interface XInterface {
    value: string;
 }

function make<T extends Constructor<any>>(Base: T) {
    return class extends Base implements XInterface {
        value = "Hello!"
    }
}

// Great. Works.
class _X1 extends make(Function) { hello() { this.value; }}

type _T1 = Constructor<HTMLElement>;

// Oops. But changing `make(Base)`, to `make(Base as _T1)` works perfectly, 
// which makes no sense.
function make2<T extends _T1>(Base: T) {
    return class extends make(Base) { }
}

Expected behavior:
Compile.

Actual behavior:
Type '{ new (...args: any[]): make.(Anonymous class); prototype: make.(Anonymous class); } & T' is not a constructor function type.

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 Beispiel für verkettete generische Mixins mit der gemeldeten Version TypeScript 3.2.0-dev zu reproduzieren, und vergleiche es anschließend mit der Variante, die Base as _T1 verwendet. Verfolge die Verarbeitung des zurückgegebenen Konstruktor-Typs durch den Compiler; abgeschlossen ist die Aufgabe, wenn das ursprüngliche Beispiel ohne den gemeldeten Fehler kompiliert.

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.