TypeScript: метод Factory - неверное расширение, возвращенные типы несовместимы - PullRequest
0 голосов
/ 26 апреля 2020

Опять проводя слишком много времени с правильными наборами, и задавался вопросом, возможно ли это без выдачи ошибкой компилятора неверного расширения базового класса, даже если он правильно распознает возвращаемый тип (см. Последнюю строку):

class Parent {
    static create<T extends Parent>(Cls: new () => T): T {
        return new Cls();
    }
}

class Child extends Parent {
    static create() {
        return super.create(Child);
    }
}

const inst = Child.create();    // correct type of "Child"

Playground Link

Ошибка выдана:

Class static side 'typeof Child' incorrectly extends base class static side 'typeof Parent'.
  The types returned by 'create(...)' are incompatible between these types.
    Type 'Child' is not assignable to type 'T'.
      'Child' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Parent'.

Как определить компилятору, что возвращаемый тип будет того же типа, что и параметр Cls? Я вроде как новичок ie в TS, но я бы сказал, что я не нуждаюсь в шаблонах, так как тип создаваемого объекта передается как параметр, поэтому я точно знаю тип.

...