Microsoft/TypeScript
Voir sur GitHubMixins created from `obj.constructor` cannot have members
Open
#61 255 ouverte le 23 févr. 2025
Domain: classesHelp WantedPossible Improvement
Métriques du dépôt
- Stars
- (48 455 stars)
- Métriques de merge PR
- (Merge moyen 6j 17h) (9 PRs mergées en 30 j)
Description
🔎 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