У меня проблема с передачей типов в TypeScript. Следующее прекрасно работает при разработке, но возникают проблемы при переходе к производству. Основная проблема связана с моим декоратором ForeignKey, так как я делаю свой собственный маленький ORM, и мне нужно передать тип функции, которая работает для разработки.
@Table("Customer")
class Customer
{
...
@ForeignKey(() => Room, Relations.OneToOneForced, "roomId")
room?: Room;
}
И декоратор ForeignKey:
type Constructor<T> = new (...args: any[]) => T;
const ForeignKey = <T>(type: () => Constructor<T>, relation: Relations, idKey?: string): PropertyDecorator =>
{
return (target, property) =>
{
let metadata = Reflect.getOwnMetadata(MetadataKey, target.constructor) as Metadata || undefined;
const fk: IForeignKey = {
key: property,
type,
relation
};
...
Reflect.defineMetadata(MetadataKey, metadata, target.constructor);
};
};
Однако сам тип не регистрируется как функция, как я ожидал. В результате я вижу:
()=>s["Room"]
()=>a["Employee"]
()=>i["Department"]
()=>i["Customer"]
или любой другой тип, который я использую. В процессе разработки я бы увидел, что распечатывается фактическая функция конструктора, а не то, что это. Я копался в TypeORM и исходном коде класса-трансформера, чтобы увидеть, как они это делают, но мне кажется, что я поступаю так же. Я пытаюсь собрать электрон, используя Vue-электронный-строитель вместе с веб-пакетом, так как он связан с Vue-Cli 3.
Это проблема с моим кодом? Это проблема с веб-пакетом? Я понятия не имею, что здесь происходит.
Любая помощь будет принята с благодарностью.