假设我在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'; }'。
我考虑了以下解决方法:
- 我可以在
any
中投给toJSON
- 我可以删除
readonly
类声明中的修饰符并删除serializableEntries
中toJSON
上的类型声明 - 我可以公开
swag
但我认为这些选择都不对。我想保持Intellisense和访问修饰符不变。可能吗