【发布时间】:2017-04-19 20:35:13
【问题描述】:
我在 Typescript 中遇到了一个问题,我找不到优雅的解决方案...
我想使用只读属性,但它们似乎与多个“构造函数”不兼容。
我正在使用多个构造函数,因为我的对象可以直接创建,也可以从 JSON 存储中实例化。我还想控制创建 API(例如,在第一次创建时创建 UUID)。
我的基类看起来像:
class UserEvent {
protected constructor(
readonly uuid: string,
readonly creationDate: Date,
) {}
static create() {
return new this(uuid(), new Date());
}
static fromJSON(jsonTree) {
return new this(jsonTree.uuid, jsonTree.creationDate);
}
toJSON(): any {
return {
uuid: this.uuid,
creationDate: this.creationDate.toJSON(),
}
}
}
然后我想继承它并添加一些属性-
class OrderedPizzaEvent extends UserEvent {
private constructor(
uuid: string,
creationDate: Date,
readonly pizzaFlavour: string,
readonly pizzaSize: number,
) {
super(uuid, creationDate);
}
static create(options: {pizzaFlavour: string, pizzaSize: number}) {
const instance = super.create();
instance.pizzaFlavour = options.pizzaFlavour;
instance.pizzaSize = options.pizzaSize;
return instance;
}
static fromJSON(jsonTree) {
const instance = super.fromJSON(jsonTree);
instance.pizzaFlavour = jsonTree.pizzaFlavour;
instance.pizzaSize = jsonTree.pizzaSize;
return instance;
}
toJSON() {
const result = super.toJSON();
result.pizzaFlavour = this.pizzaFlavour;
result.pizzaSize = this.pizzaSize;
return result;
}
}
这不起作用,因为只读属性未设置构造函数。但是在使用create() 和fromJSON() 的超级实现时,我无法使用正确的参数调用构造函数。
还有其他方法可以做到这一点吗?
【问题讨论】:
标签: typescript