TypeScript注释派生类的继承成员

时间:2018-02-23 19:50:16

标签: typescript

假设我有一个基类和一些派生类。有没有办法注释继承的成员而不必在派生类中重新实现它们?

考虑这样的事情:

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)中重新实现每个成员的情况下注释继承的成员。

1 个答案:

答案 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);
  }
}