在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; } }
由于num
variables被定义为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