在TypeScript中保护的等价物是什么?

TypeScript保护的等价物是什么?

我需要在基类中添加一些仅用于派生类的成员variables。

更新

2014年11月12日。版本1.3的TypeScript是可用的,并包括受保护的关键字。

2014年9月26日。 protected关键字已降落。 这是目前预发布。 如果您正在使用TypeScript的新版本,则现在可以使用protected关键字…下面的答案适用于旧版本的TypeScript。 请享用。

查看受保护关键字的发行说明

 class A { protected x: string = 'a'; } class B extends A { method() { return this.x; } } 

老答案

TypeScript只有private – 没有保护,这只在编译时检查时才有意义。

如果你想访问super.property它必须公开。

 class A { // Setting this to private will cause class B to have a compile error public x: string = 'a'; } class B extends A { method() { return super.x; } } 

以下方法如何:

 interface MyType { doit(): number; } class A implements MyType { public num: number; doit() { return this.num; } } class B extends A { constructor(private times: number) { super(); } doit() { return super.num * this.times; } } 

由于numvariables被定义为public,所以这将起作用:

 var b = new B(4); b.num; 

但是因为它没有在界面中定义,所以:

 var b: MyType = new B(4); b.num; 

将导致The property 'num' does not exist on value of type 'MyType'
你可以在这个操场上试试。

你也可以把它包装在模块中,而只导出接口,然后从其他导出的方法中返回实例(工厂),这样variables的公共范围将被“包含”在模块中。

 module MyModule { export interface MyType { doit(): number; } class A implements MyType { public num: number; doit() { return this.num; } } class B extends A { constructor(private times: number) { super(); } doit() { return super.num * this.times; } } export function factory(value?: number): MyType { return value != null ? new B(value) : new A(); } } var b: MyModule.MyType = MyModule.factory(4); b.num; /// The property 'num' does not exist on value of type 'MyType' 

在这个操场上修改的版本。

我知道这不是你所要求的,但是非常接近。

至less目前(版本0.9)保护规范中没有提及

http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf