Угловые 5 мешают добавлять реквизит в класс - PullRequest
0 голосов
/ 11 мая 2018

У меня есть этот класс

export class Alpha {
     propAlpha?:string;

     constructor(){
     }

     setProp(key: string, value: string) {
        this[key] = value;
     }

}

Какой-то вызов покоя дает мне объект (ответ), подобный этому:

{
    propAlpha: "foo",
    _someUnwanted: "bar"
}

Мне нужно вставить только действительные объекты этого объекта в Альфу, поэтому я сделал

let myAlpha = new Alpha();
_.each(Object.keys(response), key => {
    validProp(response[key]) && myAlpha.setProp(key, response[key]);
    /**
     * validProp() checks if value matches some criteria.
     * So even if "propAlpha" is in "Alpha" it may be 
     * excluded for some other reason!
     */
});

проблема в том, что _someUnwanted добавлено в мой класс. Как я могу предотвратить это?

Мне нужно проверить, какие ключи есть у Альфы ..

может, вот так?

if(key in myAlpha) {
   myAlpha.setProp(key, response[key]);
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Другой подход, который не требует объявления отдельного перечисления, заключается в объявлении членов класса внутри его конструктора.Тогда ваш класс Alpha будет выглядеть так:

export class Alpha {
     constructor(public propAlpha?: string){}

     setProp(key: string, value: string) {
        if (key in this) this[key] = value;
     }
}

назначение свойств не изменится

_.each(Object.keys(response), key => {
    validProp(response[key]) && myAlpha.setProp(key, response[key]);
});
0 голосов
/ 11 мая 2018

Действительно ужасно, но я решил так:

export enum AlphaPublicKeys {
    propAlpha
}

let myAlpha = new Alpha();
_.each(Object.keys(response), key => {

    if(key in AlphaPublicKeys){
        validProp(response[key]) && myAlpha.setProp(key, response[key]);
    }
    /**
     * validProp() checks if value matches some criteria.
     * So even if "propAlpha" is in "Alpha" it may be 
     * excluded for some other reason!
     */
});

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...