改变儿童班的可见度

时间:2018-02-06 13:11:35

标签: typescript

似乎可以将子类中的属性可见性从protected更改为public

class BaseFoo  {
    protected foo;
}

class Foo extends BaseFoo {
   foo = 1;
}

new Foo().foo;

但不是任何其他可能的组合。我认为通过省略可见性修饰符意外更改为public比从protected更改为private(这是不允许的)更有害。

对此有何解释?这是一个众所周知的问题吗?

1 个答案:

答案 0 :(得分:1)

在回购here中,似乎已经讨论了问题,然后关闭为“按预期工作”。 OOP理论有点超出了我的专业知识,但我对维护者逻辑的理解是,protected是基类上应该是私有的方法类别,但是允许在子级上公开。然后

class Foo extends BaseFoo {
   protected foo = 1;
}

foo上保持Foo“私密”的方法。至于隐式属性类型的问题(foo = 1默认为public?),这似乎与预期的行为有关。默认为公共是整个TS的标准,如果你想让那不可能,你可以使用:

class BaseFoo  {
    private foo;
}

class Foo extends BaseFoo {
   foo = 1; // compiler error
}