Передача типа в качестве параметра не работает в производстве в TypeScript - PullRequest
0 голосов
/ 08 октября 2019

У меня проблема с передачей типов в 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.

Это проблема с моим кодом? Это проблема с веб-пакетом? Я понятия не имею, что здесь происходит.

Любая помощь будет принята с благодарностью.

...