TypeScript mixin / factory с абстрактным входным классом - PullRequest
0 голосов
/ 28 марта 2020

У меня есть небольшой базовый класс:

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 нормальным ИЛИ абстрактным классом, и свойства сохранены? Спасибо!

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