У меня в качестве сокращенного примера приведен следующий код:
class QueryArgs {
studentId?: string;
teacherId?: string;
}
class BaseValidator<T> {
protected args: T;
constructor(args: T) {
this.args = args;
}
protected requireTeacher(): void {
if (!this.args.teacherId) {
throw new Error("teacherId required");
}
}
}
class QueryValidator extends BaseValidator<QueryArgs> {
public validateAdmin(): QueryArgs {
this.requireTeacher();
return this.args;
}
}
// Recreated implementation from a third party library
const args: QueryArgs = new QueryArgs();
args.studentId = "XXXX-XXX-XXX";
// Not the actual implementation just for illustration
const validator = new QueryValidator(args);
const validArgs = validator.validateAdmin();
Проблема, с которой я столкнулся, заключается в классе BaseValidator
в методе requireTeacher
this.args.teacherId
с ошибкой Property 'teacherId' does not exist on type 'T'
.
Я не уверен, чего мне не хватает в обобщенной части Typescript.
В идеале TS должен знать в BaseValidator
, что args
является экземпляром QueryArgs
.
Заранее спасибо!