打字稿继承和通用属性

时间:2017-01-13 18:54:36

标签: generics inheritance typescript

我对通用属性有一些问题。并为它提供一些解决方案。关于以下代码,您可以提出其他解决方案吗?

 interface IConfig{
  property?: number;
}

interface IChildConfig extends IConfig{
  otherProperty?: number;
}

class Base<T extends Base<any, IConfig>, U extends IConfig>{

  protected _config: U | IConfig = {
    property: 10
  };

  public config(){
    return <U>this._config;
  }
}

class Child extends Base<Child, IChildConfig>{

  protected _config: IChildConfig = {
    property: 20,
    otherProperty: 10
  }
}

let a = new Child(),
  b = new Base();

a.config();
b.config();

在示例中,我将_config属性类型设置为U | IConfig避免错误。 如果我删除&#34; |配置&#34;零件编译器会引发错误。 据我所知,类型U必须相等或扩展IConfig接口。

1 个答案:

答案 0 :(得分:2)

如果您将_config设置为U,那么现在无法使用TypeScript _config的类型是否正确,因为这取决于U实际是什么。在JavaScript中也没有属性重载这样的东西。

解决方案取决于您真正想要实现的目标,但这可行:

abstract class Base<T extends Base<any, IConfig>, U extends IConfig>{
  abstract config(): U;
}