Typescript не может получить доступ к типу свойства из декоратора машинописи.(Цель: {}) - PullRequest
2 голосов
/ 30 марта 2019

В настоящее время я внедряю инжектор зависимостей для использования в проекте VUE js.

Я создал декоратор Inject и хочу получить доступ к типу свойства, у меня это работало вчера, но что-то случилось, и я полностью потерян.Я выполнил консоль JSON.stringify (target), и я получил пустой объект, что означает, что мой декоратор запускается до создания класса.

Я использую метаданные отражений для получения типа, но он разрешается равным нулю, поскольку целью является пустой объект.Эту проблему можно решить, передав тип в качестве параметра декоратора, однако это решение не так элегантно, как хотелось бы.

Есть ли способ заставить декоратор ждать, пока класс не будет созданили там где-то я просто ошибаюсь?Ниже приведен код декоратора:

export const Inject = (): any => {
    return (target: any, key: string): any => {
        if (delete target[key]) {
            Object.defineProperty(target, key, {
                get: () => {
                    const type = Reflect.getMetadata('design:type', target, key);
                    return Injector.resolve(type);
                },
            });
        }
    };
};

Ниже приведена аннотация декоратора:

@Inject()
public testService: TestService;

Заранее спасибо!

1 Ответ

1 голос
/ 03 апреля 2019

Итак, после нескольких дней возни я наконец нашел ответ, почему это не сработало, и мне больно от того, насколько это очевидно. Таким образом, в файле конфигурации TS есть флаг, который должен быть установлен в true для того, чтобы метаданные декоратора были отправлены. Флаг показан ниже:

"emitDecoratorMetadata": true

Как только это было установлено, код работал точно так же, как и раньше!

...