Я делаю 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({...})
и вообще не иметь методов в моих дочерних классах.