microsoft / microsoft/TypeScript
Mixin with union as base class
Nessuno ha ancora preso questa issue.
- 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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- 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