Аргумент конструктора родительского класса TypeScript ... получить тип создаваемого дочернего класса - PullRequest
0 голосов
/ 07 марта 2020

Я делаю ORM, где я хочу, чтобы в родительском классе были только те методы, от которых наследуются все модели.

Это означает, что я действительно хочу, чтобы в родительском классе был только один метод конструктора учебный класс. Все дочерние классы моделей (по одному на SQL таблицу) будут содержать только свои свойства поля и ничего больше.

См. Пример кода:

abstract class AnimalParentClass {
    constructor(childFieldValues/*:??ChildClassType??*/) {
        console.log(`Constructing a ${this.constructor.name} with its expected fields: `, childFieldValues); // CCLOG
    }
}

class CatClass extends AnimalParentClass {
    name:string;
    meowCount:number;
}

class DogClass extends AnimalParentClass {
    name:string;
    woofCount:number;
}

const catInstance = new CatClass({/* editor should auto complete fields: name, meowCount */});

const dogInstance = new DogClass({/* editor should auto complete fields: name, woofCount */});

Как я могу получить метод AnimalParentClass.constructor () для вывода типа из дочернего класса, для которого я вызываю new?

Я перепробовал несколько подходов, но обычно получаю сообщение об ошибке, например:

TS1092: Type parameters cannot appear on a constructor declaration

Я знаю, что есть несколько альтернативных подходов:

  • Добавление constructor() { super(...); } методов ко всем дочерним классам

  • Или вообще не вызывайте ключевое слово new для классов классов, а вместо этого используйте метод stati c для создание новых объектов

... но я пытаюсь найти подход, при котором мне не нужно делать ни одну из этих вещей. то есть я хотел бы все еще использовать синтаксис new ChildClass({...}) и вообще не иметь методов в моих дочерних классах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...