-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Open
Labels
BugA bug in TypeScriptA bug in TypeScriptDomain: classesBehavior of various `class` constructs, e.g. mixins or base classesBehavior of various `class` constructs, e.g. mixins or base classes
Milestone
Description
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
johncrim, TechQuery and alexandermccormick
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptDomain: classesBehavior of various `class` constructs, e.g. mixins or base classesBehavior of various `class` constructs, e.g. mixins or base classes