TypeScript中的protected等价物是什么?
我需要在基类中添加一些成员变量,以便仅在派生类中使用。
2014 年 11 月 12 日。TypeScript 1.3 版可用,包括受保护的关键字。
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
变量被定义为公共的,这将起作用:
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'
.
你可以在这个操场上试试。
您也可以将其包装在模块中,同时仅导出接口,然后从其他导出的方法中返回实例(工厂),这样变量的公共范围将“包含”在模块中。
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'
这个游乐场的修改版。
我知道这不完全是你要求的,但它非常接近。
至少目前(0.9版)受保护的规格中没有提到
http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf