Невозможно получить функцию без `Reflect.getMetadata` - PullRequest
0 голосов
/ 27 мая 2019

Я попытался выяснить это для извлечения функции с помощью декоратора, но когда я определил метадескриптор и получил снова, я ничего не получил, это то, что я сделал до сих пор:

actionListener function:

export const PROPERTY_META_METHOD = Symbol('meta:action');

export const CONTAINER_CLASS = [];


export function ActionListner(key: string) {
    return function(target, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
        let topicFns: Array<() => void> = Reflect.getMetadata(PROPERTY_META_METHOD, target);

        if(!topicFns) {
            Reflect.defineMetadata(PROPERTY_META_METHOD, topicFns = [], target);
        }
        function isActionListener(obj: any): obj is IActionListner {
            return (<IActionListner> obj).actionValue || (<IActionListner> obj).bottonKey !== undefined ;
        }
        const method = descriptor.value;

        const config = { class: target}
        CONTAINER_CLASS.push(config);

        descriptor.value  = function(...args:any[]) {
            for(let i: number = 0; i < args.length; ++i) {
                if(isActionListener(args[i]) && (<IActionListner>args[i]).bottonKey === key) {
                    return method.apply(this, args)
                }
            }
            return;
        }
        return descriptor;
    };
}

добавление декоратора в функцию

@ActionListner('btnPencarianBelanja')
  actionPencarian(action: IActionListner) {
    console.log(action);
    return null;
  }

при попытке получить метаданные

 CONTAINER_CLASS.forEach(clazz => {
        const target = clazz.class;
        let topicFns: Array<() => void> = Reflect.getMetadata('design:type', target, target)
        console.log(topicFns);
        if(topicFns && topicFns.length > 0) {
            for(const meta of topicFns) {
               const action: IActionListner = {
                 actionValue: this.selectedNode,
                 bottonKey: e.key
               }
               const args: any[] = [action]
               Reflect.apply(meta, void 0, args);
            }
        }
    });

Пожалуйста, помогите мне

...