У меня есть небольшой базовый класс:
abstract class BaseEntity {
property1: string = 'test1';
property2: number = 123;
}
И некоторые типы и фабричный метод:
type AbstractType<T> = Function & { prototype: T };
type InstantiableType<T> = new (...args: any[]) => T;
type ClassType<T={}> = AbstractType<T> | InstantiableType<T>;
export function FactoryWithUserRelation<T extends ClassType>(baseClass: T){
abstract class Class extends baseClass{
user: User;
}
return Class;
}
Теперь, когда я пытаюсь выполнить следующее, некоторые свойства теряются :
class Test extends FactoryWithUserRelation(BaseEntity){
...
}
const test = new Test();
test.user //would work
test.property1 //not found
test.property2 //not found
Когда я изменяю подпись на следующую и делаю BaseEntity неабстрактным,
FactoryWithUserRelation<T extends InstantiableType<{}>(baseClass: T){...}
Все свойства найдены. Есть ли какое-либо Решение, которое является baseClass нормальным ИЛИ абстрактным классом, и свойства сохранены? Спасибо!