class Processor<T extends object> {
data!: T;
test (i : keyof T) : T[keyof T] | undefined {
return this.data[i];
}
}
class BaseRunner<
T extends object,
P extends Processor<T>
> {
proccessor!: P;
constructor (proccessor : P) {
this.proccessor = proccessor;
}
}
class DerivedRunner<
T extends object,
P extends Processor<T>
> extends BaseRunner<T, P> {}
const instanceOne : typeof BaseRunner = DerivedRunner;
interface ctor<T extends object, P extends Processor<T>> {
new(proccessor : P) : BaseRunner<T, P>
}
const instanceTwo : ctor<object, Processor<object>> = DerivedRunner;
Цель состоит в том, чтобы присвоить класс DerivedRunner
переменной типа BaseRunner
, но это приводит к ошибке несовместимости Type 'T[keyof T] | undefined' is not assignable to type 'undefined'.
с instanceOne
из-за того, что T[keyof T]
используется как возвращаемый тип в классе Processor, но отлично работает при назначении DerivedClass типу интерфейса конструктора BaseRunner, как в случае с instanceTwo
. Насколько я понимаю, typeof BaseRunner
должен генерировать одну и ту же сигнатуру конструктора, так почему же есть это несоответствие между двумя экземплярами.