' ...错误地扩展基类静态方面'覆盖派生类中的静态字段时出错

时间:2016-09-30 19:56:50

标签: inheritance typescript static-variables

覆盖派生类中的静态字段会导致

  

错误TS2417:构建:类静态端'类型TDerived'错误地扩展了基类静态端&#TB;类型TBase'

这是一个合法的错误案例吗?

class TBase
{
  private static s_field = 'something';

  public constructor() {}
}

class TDerived extends TBase
{
  private static s_field = 'something else'; // commenting this line fixes error

  public constructor()
  {
    super();
  }
}

我应该如何处理静态字段呢? 现在唯一的解决方法是将类名添加到每个静态字段名称,这是一个非常难看的解决方案。

private static TBase_s_field = 'something';
...
private static TDerived_s_field = 'something else';

ps使用typescript 2.0.3

1 个答案:

答案 0 :(得分:2)

您无法在派生类中重新声明private字段。如果您希望派生类能够重新声明或访问该字段,请使用protected

这是强制执行的,因为派生类中也可以使用静态方法。例如,此代码执行了一些意外的操作(如果我们忽略编译错误):

class Base {
    private static foo = 'base';

    static printName() {
        // Should always print 'base' because no one
        // else has access to change 'foo'
        console.log(this.foo);
    }
}

class Derived extends Base {
    private static foo = 'derived';
}
// Will actually print 'derived'
Derived.printName();