Как получить значение другого свойства через декоратор в TypeScript - PullRequest
0 голосов
/ 16 октября 2018
export class UmsDictionary {
    public aField = "SUPER";
    @PropertyAlias('aField')
    public dictionary = "dictionary";
}

export function PropertyAlias(name: string) {
 return (target: any, key: string) => {
   Object.defineProperty(target, key, {
     configurable: false,
     get: () => {
       return target[name];
     },
     set: (val) => {}
   })
 }
}

...

const dct = new UmsDictionary();
console.log("VALUE = " + dct.dictionary); //undefined

Я пытаюсь получить значение свойства aFiled, вызвав метод получения свойства словаря.В чем моя ошибка?Спасибо

1 Ответ

0 голосов
/ 16 октября 2018

target не будет экземпляром класса, это будет сам класс.для доступа к значениям полей вам нужно будет использовать this внутри функции get / set и не использовать функции стрелок:

export class UmsDictionary {
    public aField = "SUPER";
    @PropertyAlias('aField')
    public dictionary = "dictionary";
}

export function PropertyAlias(name: string) {
    return (target: any, key: string) => {
        Object.defineProperty(target, key, {
            configurable: false,
            get: function (this: { [name: string]: any}) {
                return this[name];
            },
                set: function (this: { [name: string]: any}) {
            }
        })
    }
}
const dct = new UmsDictionary();
console.log("VALUE = " + dct.dictionary); //undefined
...