假设我有一个基类和一些派生类。有没有办法注释继承的成员而不必在派生类中重新实现它们?
考虑这样的事情:
class BaseModel {
collection: Collection;
constructor(collectionName: string) {
this.collection = connectToCollection(collectionName);
}
create(data: {}) { // <- I would like to annotate 'data' in the derived classes
this.collection.insert(data);
}
}
class ModelA extends BaseModel {
constructor(collectionName: string) {
super(collectionName);
}
}
class ModelB extends BaseModel {
constructor(collectionName: string) {
super(collectionName);
}
}
create
成员的参数对于ModelA和ModelB是不同的,所以我想分别对它们进行注释。
我想我可以像这样重新实现它们:
class ModelA extends BaseModel {
constructor(collectionName: string) {
super(collectionName);
}
create(data: ArgsForModelA) {
this.super.create(data);
}
}
class ModelB extends BaseModel {
constructor(collectionName: string) {
super(collectionName);
}
create(data: ArgsForModelB) {
this.super.create(data);
}
}
但它感觉不对,所以我很好奇是否可以在没有在所有派生类(phew)中重新实现每个成员的情况下注释继承的成员。
答案 0 :(得分:3)
您可以使用泛型。
class BaseModel<T> {
collection: Collection;
constructor(collectionName: string) {
this.collection = connectToCollection(collectionName);
}
create(data: T) {
this.collection.insert(data);
}
}
class ModelA extends BaseModel<ArgsForModelA> {
constructor(collectionName: string) {
super(collectionName);
}
}
class ModelB extends BaseModel<ArgsForModelB> {
constructor(collectionName: string) {
super(collectionName);
}
}