Json 如何在序列化期间忽略类的受保护只读成员

Json 如何在序列化期间忽略类的受保护只读成员,json,typescript,class,encapsulation,protected,Json,Typescript,Class,Encapsulation,Protected,假设我在Typescript中有一个类,该类具有一个作为构造函数参数的受保护只读成员,以及多个从该类扩展并使用该属性的类: class Yolo { public readonly swolo: boolean = false; // Lots of other properties constructor(protected readonly swag: string = '') {} } 我希望从JSON.stringify(new Yolo())生成的字符串没有

假设我在Typescript中有一个类,该类具有一个作为构造函数参数的受保护只读成员,以及多个从该类扩展并使用该属性的类:

class Yolo {
    public readonly swolo: boolean = false;
    // Lots of other properties

    constructor(protected readonly swag: string = '') {}
}
我希望从
JSON.stringify(new Yolo())
生成的字符串没有任何
swag

{"swolo":false, ...(Every other property except "swag")}
有没有办法通过排除(即不在
JSON.stringify
上使用第二个参数)来实现这一点,因为类上还有许多其他属性,并且仍然保留Intellisense

我最初的倾向是写
toJSON
,就像

public toJSON() {
    const serializableEntries: {
        -readonly [K in keyof Yolo]: Yolo[K]
    } = {
        ...this
    };

    delete serializableEntries.swag;
    return serializableEntries;
}
但这会导致编译错误,因为
keyolo
不包括
swag

{"swolo":false, ...(Every other property except "swag")}
属性“swag”在类型“{toJSON:()=>string;}”上不存在

我考虑了以下解决方法:

  • 我可以在
    toJSON
  • 我可以删除
    readonly
    从类声明中删除修饰符,并删除
    toJSON
  • 我可以把
    swag
    公之于众
  • 但在我看来,这些选择都不是有利的。我想保持Intellisense和访问修饰符的原样。有可能吗

    如何使用:

    这会将
    的所有属性复制到
    道具
    中,但
    swag
    属性除外

    console.log(new Yolo("shwag").toJSON()); //{"swolo":false}
    
    我觉得不错。希望有帮助;祝你好运


    如果可以,请使用getter。对不起,我应该在说明中说明这一点,但这是不可能的,因为该属性实际上是动态的。我来换个问题。我喜欢,谢谢。我总是忘了这个功能,因为语法让我觉得很奇怪。