microsoft / microsoft/TypeScript
Can't extend mixin constructor that constructs a generic type
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
This applies regardless of whether or not I intersect it with some bogus type, or have a reasonable constraint. So none of the following works.
Returning a plain T
export type Constructor<T> = new (...args: any[]) => T
export interface Timestamp {
timestamp: Date;
}
// plain old T
export function Timestamp<T, CT extends Constructor<T>>(Base: CT): Constructor<Timestamp> & Constructor<T> {
return class extends Base {
timestamp = new Date();
}
}
Constructor of T with a bogus object type ({})
export type Constructor<T> = new (...args: any[]) => T
export interface Timestamp {
timestamp: Date;
}
// Constructor of T with a bogus object type
export function Timestamp<T, CT extends Constructor<T & {}>>(Base: CT): Constructor<Timestamp> & Constructor<T> {
return class extends Base {
timestamp = new Date();
}
}
Constructor of T where T is constrained to {}
export type Constructor<T> = new (...args: any[]) => T
export interface Timestamp {
timestamp: Date;
}
export function Timestamp<T extends {}, CT extends Constructor<T>>(Base: CT): Constructor<Timestamp> & Constructor<T> {
return class extends Base {
timestamp = new Date();
}
}
Constructor of T where T is constrained to object (see also #13805)
export type Constructor<T> = new (...args: any[]) => T
export interface Timestamp {
timestamp: Date;
}
export function Timestamp<T extends object, CT extends Constructor<T>>(Base: CT): Constructor<Timestamp> & Constructor<T> {
return class extends Base {
timestamp = new Date();
}
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the four generic constructor and mixin examples in the issue and inspecting the resulting type-checking errors. Trace the compiler's handling of generic construct signatures and class expressions; done means the intended generic mixin constructor pattern is accepted with the stated return type, without weakening unrelated checks.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100