如何在序列化期间忽略 class 的受保护只读成员
How to ignore protected readonly member of class during serialization
假设我在 Typescript 中有一个 class,它有一个受保护的只读成员,它是一个构造函数参数,并且多个 class 从 class 扩展并使用 属性:
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
上使用第二个参数)来实现此 ,因为 [=53] 上还有许多其他属性=], 并且仍然保留 Intellisense?
我最初的倾向是将 toJSON
写成
public toJSON() {
const serializableEntries: {
-readonly [K in keyof Yolo]: Yolo[K]
} = {
...this
};
delete serializableEntries.swag;
return serializableEntries;
}
但这会导致编译错误,因为 keyof Yolo
不包括 swag
:
Property 'swag' does not exist on type '{ toJSON: () => string; }'.
我考虑过以下解决方法:
- 我可以在
toJSON
中转换为 any
- 我可以删除
readonly
Class 声明中的修饰符并删除 toJSON
中 serializableEntries
上的类型声明
- 我可以
swag
public
但我认为这些选项中的 none 是有利的。我想保持 Intellisense 和访问修饰符不变。有可能吗?
如何使用 object destructuring:
public toJSON(): string {
const { swag: _, ...props } = this;
return JSON.stringify(props);
}
这具有将 this
的所有属性复制到 props
的效果,除了 swag
属性.
console.log(new Yolo("shwag").toJSON()); //{"swolo":false}
我觉得不错。希望有所帮助;祝你好运!
假设我在 Typescript 中有一个 class,它有一个受保护的只读成员,它是一个构造函数参数,并且多个 class 从 class 扩展并使用 属性:
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
上使用第二个参数)来实现此 ,因为 [=53] 上还有许多其他属性=], 并且仍然保留 Intellisense?
我最初的倾向是将 toJSON
写成
public toJSON() {
const serializableEntries: {
-readonly [K in keyof Yolo]: Yolo[K]
} = {
...this
};
delete serializableEntries.swag;
return serializableEntries;
}
但这会导致编译错误,因为 keyof Yolo
不包括 swag
:
Property 'swag' does not exist on type '{ toJSON: () => string; }'.
我考虑过以下解决方法:
- 我可以在
toJSON
中转换为 - 我可以删除
readonly
Class 声明中的修饰符并删除toJSON
中 - 我可以
swag
public
any
serializableEntries
上的类型声明
但我认为这些选项中的 none 是有利的。我想保持 Intellisense 和访问修饰符不变。有可能吗?
如何使用 object destructuring:
public toJSON(): string {
const { swag: _, ...props } = this;
return JSON.stringify(props);
}
这具有将 this
的所有属性复制到 props
的效果,除了 swag
属性.
console.log(new Yolo("shwag").toJSON()); //{"swolo":false}
我觉得不错。希望有所帮助;祝你好运!