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

假设我在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;
}

但这会导致编译错误,因为keyof Yolo不包含swag

  

类型'{toJSON:()=> string;不存在属性'swag'; }'。

我考虑了以下解决方法:

  1. 我可以在any中投给toJSON
  2. 我可以删除readonly 类声明中的修饰符并删除serializableEntriestoJSON上的类型声明
  3. 我可以公开swag

但我认为这些选择都不对。我想保持Intellisense和访问修饰符不变。可能吗

guotenglin534577320 回答:如何在序列化期间忽略受保护的只读类的成员

如何使用object destructuring

public toJSON(): string {
    const { swag: _,...props } = this;
    return JSON.stringify(props);
}

这具有将this属性以外的所有props属性复制到swag的作用。

console.log(new Yolo("shwag").toJSON()); //{"swolo":false}

对我很好。希望能有所帮助;祝你好运!

Link to code

本文链接:https://www.f2er.com/3106134.html

大家都在问