如何获取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字符串化一个User实例,如下所示:
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
方法。
有什么建议吗?