2015-06-22 42 views
2

你好,我想实现这样的场景:打字稿 - 重载私有方法

class A implements InterfaceForA 
{ 
    a():void 
    { 
     this.b(); 
    } 
} 

Class B extends A 
{ 
    private b():void 
    { 
     console.log('Hi'); 
    } 
} 

但它抛出:

错误TS2339:房产 'B' 不会在 'A' 型存在。

所以我更新了我的班,现在它抛出:

错误TS2415:类 'B' 正确扩展基类 'A'。类型具有私有属性'b'的单独声明。

随着代码:

class A implements InterfaceForA 
{ 
    a():void 
    { 
     this.b(); 
    } 

    private b():void 
    { 
     console.log('Hello'); 
    } 
} 

Class B extends A 
{ 
    private b():void 
    { 
     console.log('Hi'); 
    } 
} 

在C++中,我将在类中设置的方法B()作为虚拟专用,和问题将得到解决。在JS中,它根本不是问题。如何在TypeScript中做到这一点?

回答

6

在C++中,你实际上将它设置为受保护的。私人成员是私人的。

Typescript> = 1.3支持受保护的限定符。

参见:What is the equivalent of protected in TypeScript?

+0

在C++中, '私人虚拟' 不同于保护。它可以被重写,但不能从派生类中调用。 –

+0

@AntonPilyak谢谢!很高兴知道。 – Andrew