Microsoft/TypeScript
GitHub ã§èŠãMixins created from `obj.constructor` cannot have members
Open
#61,255 opened on 2025幎2æ23æ¥
Domain: classesHelp WantedPossible Improvement
Repository metrics
- Stars
- Â (48,455 stars)
- PR merge metrics
-  (å¹³åããŒãž 6d 17h) (30d ã§ 9 merged PRs)
説æ
ð Search Terms
mixin constructor property instance
ð Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about mixins
⯠Playground Link
ð» Code
type Constructor<T> = new(...args: any[]) => T;
class Foo {
// Work around https://github.com/microsoft/TypeScript/issues/3841
declare ["constructor"]: Constructor<this>;
}
function Mixin1<T extends Constructor<Foo>>(superclass: T) {
// OK
return class extends superclass {
foof() {}
};
}
function Mixin2<T extends Foo>(obj: T) {
// Class '(Anonymous class)' incorrectly extends base class 'T'.
// '(Anonymous class)' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Foo'.
return class extends obj.constructor {
foof() {}
};
}
ð Actual behavior
Mixin1 compiles fine, but Mixin2 has an error:
Class '(Anonymous class)' incorrectly extends base class 'T'.
'(Anonymous class)' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Foo'.
Removing the foof member causes it to compile without error.
ð Expected behavior
Both should compile fine because they are doing the same thing.
Additional information about the issue
No response