microsoft / microsoft/TypeScript

Mixin with union as base class

Aperta
#41,132 3 commenti 5 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

In Discussion Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

TypeScript Version: 4.1.0-dev.20201015

Search Terms:

Code

abstract class Base {
    abstract p1: number;
}

class Derived1 extends Base {
    p1 = 1;
    p2 = 2;
}

class Derived2 extends Base {
    p1 = 1;
    p3 = 3;
}

// normally TBase could extend from Base but Base is abstract here, hence the union
function Mixin<TBase extends (new (...params: any[]) => Derived1) | (new (...params: any[]) => Derived2)>(Base: TBase) {
    return class extends Base {
        p4 = 4;
        m() {
            console.log(this.p4);
            // error: Property 'p1' does not exist on type '(Anonymous class)'.(2339)
            // I'd expext the property to be available since both Derived1 and Derived2 have it
            console.log(this.p1);
        }
    };
}

const Derived1WithMixin = Mixin(Derived1);
new Derived1WithMixin().m();

Expected behavior: I'd expect the property p1 to be available in the Mixin since both types in the union have it.

Actual behavior: I get the compiler error error: Property 'p1' does not exist on type '(Anonymous class)'.(2339).

Playground Link: Link

Related Issues:

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con la riproduzione collegata di TypeScript Playground e verifica l'errore segnalato per TypeScript 4.1.0-dev.20201015. Traccia il comportamento del compilatore per un mixin il cui tipo di costruttore di base è un'unione, quindi determina se la proprietà condivisa dovrebbe essere disponibile. Il lavoro è completato quando la riproduzione si comporta come previsto e la copertura verifica il comportamento corretto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.