Qual è l'equivalente di protetto in TypeScript?Qual è l'equivalente di protetto in TypeScript?
ho bisogno di aggiungere alcune variabili membro della classe di base deve essere utilizzato solo in classi derivate.
Qual è l'equivalente di protetto in TypeScript?Qual è l'equivalente di protetto in TypeScript?
ho bisogno di aggiungere alcune variabili membro della classe di base deve essere utilizzato solo in classi derivate.
12 novembre 2014. La versione 1.3 del dattiloscritto è disponibile e include la parola chiave protetta.
26 settembre 2014. La parola chiave protected
è stata interrotta. Attualmente è pre-release. Se stai usando una versione molto nuova di TypeScript, ora puoi usare la parola chiave protected
... la risposta sotto è per le versioni precedenti di TypeScript. Godere.
View the release notes for the protected keyword
class A {
protected x: string = 'a';
}
class B extends A {
method() {
return this.x;
}
}
Carattere tipografico ha solo private
- non protetto e questo significa solo privata durante la fase di compilazione controllo.
Se si desidera accedere a super.property
deve essere pubblico.
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;
}
}
Come circa il seguente approccio:
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;
}
}
Poiché la variabile num
è definito come pubblico, questo funzionerà:
var b = new B(4);
b.num;
Ma poiché non è definito nell'interfaccia, questo :
var b: MyType = new B(4);
b.num;
corrisponderà a The property 'num' does not exist on value of type 'MyType'
.
Puoi provare in questo playground.
È anche possibile avvolgerlo in un modulo esportando solo l'interfaccia, quindi da altri metodi esportati è possibile restituire le istanze (factory), in questo modo l'ambito pubblico delle variabili verrà "contenuto" nel modulo.
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'
Versione modificata in questo playground.
So che non è esattamente quello che hai chiesto, ma è piuttosto vicino.
almeno al momento (versione 0.9) protetto non sono menzionati nelle specifiche
http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf
È possibile votare fino questo problema CodePlex: http://typescript.codeplex.com/workitem/125 –
Ho aggiornato la mia risposta per riflettere che 'protected' è atterrato: https://github.com/Microsoft/TypeScript/pull/688 – Fenton