Was entspricht geschützt in TypeScript?Was ist in TypeScript geschützt?
Ich brauche einige Membervariablen in der Basisklasse hinzufügen- nur in abgeleiteten Klassen verwendet werden.
Was entspricht geschützt in TypeScript?Was ist in TypeScript geschützt?
Ich brauche einige Membervariablen in der Basisklasse hinzufügen- nur in abgeleiteten Klassen verwendet werden.
12. November 2014 Version 1.3 von Typoskript verfügbar und enthält das geschützte Schlüsselwort.
26. September 2014. Das protected
Schlüsselwort ist gelandet. Es ist derzeit Vorabveröffentlichung. Wenn Sie eine sehr neue Version von TypeScript verwenden, können Sie jetzt das Schlüsselwort protected
verwenden ... Die folgende Antwort bezieht sich auf ältere Versionen von TypeScript. Genießen.
View the release notes for the protected keyword
class A {
protected x: string = 'a';
}
class B extends A {
method() {
return this.x;
}
}
Typoskript hat nur private
- nicht geschützt und das bedeutet, nur die Überprüfung während der Kompilierung Zeit privat.
Wenn Sie auf super.property
zugreifen möchten, muss es öffentlich sein.
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;
}
}
Wie zu folgendem Ansatz:
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;
}
}
Da die num
Variable als öffentliche definiert ist, wird diese Arbeit:
var b = new B(4);
b.num;
Aber da es in der Schnittstelle nicht definiert ist, diese :
var b: MyType = new B(4);
b.num;
wird The property 'num' does not exist on value of type 'MyType'
ergeben.
Sie können es in diesem playground versuchen.
Sie können es auch in ein Modul einbinden, während Sie nur die Schnittstelle exportieren, dann können Sie von anderen exportierten Methoden die Instanzen (Factory) zurückgeben, so dass der öffentliche Gültigkeitsbereich der Variablen im Modul "enthalten" ist.
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'
Modifizierte Version in diesem playground.
Ich weiß, es ist nicht genau das, wonach Sie gefragt haben, aber es ist ziemlich nah.
zumindest im Moment (Version 0.9) geschützt sind, nicht in den Spezifikationen erwähnt
http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf
Sie können diese CodePlex Ausgabe vote up: http://typescript.codeplex.com/workitem/125 –
Ich habe meine Antwort aktualisiert, um anzuzeigen, dass "protected" gelandet ist: https://github.com/Microsoft/TypeScript/pull/688 – Fenton