我有一个用于定义存储关系函数的父类,以及一个在商店中定义其表的子类。在父类中,我定义了一个连接到实例表的save()
函数,但该表是在子表上定义的。我想我可以设置父级的构造函数来接受孩子的tableName
,但是我的linter抱怨在引用super
之前必须调用this
(即使我想将this
上的属性传递给super。
这里是父母:
export class StoredObject {
constructor(private tableName: string) {}
public save() {
store.collection(this.tableName) //...
}
}
孩子:
export class Inventory extends StoredObject {
tableName = "inventory";
constructor(
public myVar //...
) {
super(this.tableName)
}
}
我知道一个解决方案就是创建一个只返回this.tableName
值的getter函数,但这似乎是hackish。我也知道我可以简单地将实际字符串放在super
中(例如,在Inventory
中,使构造函数为{ super("inventory") }
,但这似乎不够优雅。我怀疑有一种方法传统上实现了我想要做的事情,但我似乎无法找到它。
答案 0 :(得分:4)
查看Ryan Cavanaugh's response here
具体来说,
初始化的顺序是:
- 初始化基类初始化属性
- 基类构造函数运行
- 初始化派生类初始化属性
- 派生类构造函数运行
醇>
您已经让超类负责初始化tableName属性,并且必须能够在创建子类之前执行此操作。您要么必须传递“库存”,要么改变这种关系。