microsoft / microsoft/TypeScript
Mixin abstract class: union of abstract propeties is not abstract.
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: 3.9.2
Search Terms: mixin abstract union
Expected behavior:
Union of abstract propeties is abstract property.
Actual behavior:
Union of abstract propeties is not abstract.
Related Issues:
Code
type Constructor = new (...args: any[]) => {};
class BaseClass {}
function AB<TBase extends Constructor>(Base: TBase) {
abstract class AB extends Base {
abstract a: number
abstract b: number
};
return AB
}
function AC<TBase extends Constructor>(Base: TBase) {
abstract class AC extends Base {
abstract a: number
abstract c: number
};
return AC
}
// should throw "Non-abstract class 'ShouldHavePropA' does not implement inherited abstract member 'a' from class ..."
class ShouldHavePropA extends AB(AC(BaseClass)) {
b = 1;
c = 2;
}
Output
"use strict";
class BaseClass {
}
function AB(Base) {
class AB extends Base {
}
;
return AB;
}
function AC(Base) {
class AC extends Base {
}
;
return AC;
}
class ShouldHavePropA extends AB(AC(BaseClass)) {
constructor() {
super(...arguments);
this.b = 1;
this.c = 2;
}
}
Compiler Options
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"alwaysStrict": true,
"esModuleInterop": true,
"declaration": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": 2,
"target": "ES2017",
"jsx": "React",
"module": "ESNext"
}
}
Playground Link: Provided
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 il link al Playground TypeScript 3.9.2 e riduci l'esempio di mixin fornito a un test mirato del compilatore. Traccia il modo in cui le proprietà astratte vengono raccolte attraverso l'unione dei mixin AB e AC. Il lavoro è completo quando l'esempio segnala che ShouldHavePropA non implementa il membro astratto ereditato a, con un test di regressione che copra questo comportamento.
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
- Abbastanza chiara
- Idoneità per principianti
- 28/100