Closed
Description
If you extend a generic class and pass a type argument, the instantiated constructor of the base class fails to contextually type the argument of a super call. This works correctly for base class methods, and it works correctly for constructors if the contextual type is not based on a type argument that was passed in the extends clause.
class C extends CBase<string> {
constructor() {
// Does not work
super({
method(p) { p.length; } // Error
});
// Works
super.foo({
method(p) { p.length; }
});
}
}
class CBase<T> {
constructor(param: ContextualType<T>) { } // Works if you change this to ContextualType<string>
foo(param: ContextualType<T>) { }
}
interface ContextualType<T2> {
method(parameter: T2): void;
}