Как получить декоратор класса Typescript для вызова метода, который устанавливает любое свойство или метод, начинающийся с "_", как не перечисляемое свойство (по сути, делая его закрытым для целей сериализации)?
Представьте, что есть класс, который является базовым классом, из которого будут расширяться все остальные классы в моем приложении:
class Base {
constructor(data: any){
Object.assign(this, data)
}
_setNonEnumerableProperties(){
Object.keys(this).forEach(key => {
if(key[0] === '_')
Object.defineProperty(this, key, { enumerable: false })
})
}
}
А затем у меня есть класс User, подобный этому:
@nonEnumerablePrivateMembers
class User extends Base {
public name: string
public email: string
private _active: boolean
}
И я создаю и JSON строковый экземпляр пользователя, как это:
const user = new User({name: 'John', email: 'john@example.com', _active: false})
const jsonUser = JSON.stringify(user)
console.log(jsonUser)
Я ожидаю, что результат будет следующим:
{ "name": "John", "email": "john@example.com" }
, а не это:
{ "name": "John", "email": "john@example.com", "_active": false }
Обратите внимание, что оно не включает свойство _active
.
Мне нужно знать, как написать nonEnumerablePrivateMembers
декоратор, который будет вызывать метод _setNonEnumerableProperties
в Базовом классе для нового экземпляра расширенного класса.
Есть предложения?