Creo que es útil para acceder a miembros estáticos:
A continuación un ejemplo:
class A {
protected static type: string;
public log(): string {
console.log(this.type);
}
}
class B extends A {
protected static type: string = 'C';
}
class C extends A {
protected static type: string = 'C';
}
b = new B();
b.log(); // => 'B'
c = new C();
c.log(); // => 'C'
No podemos hacerlo de la manera que sugiere, ya que this.type
se usa para acceder a una propiedad _instancia_ llamada type
, no a una propiedad _static_.
Sin embargo, su ejemplo funciona si lo escribe de la siguiente manera:
class A {
"constructor": typeof A; // Explicitly declare constructor property
protected static type: string;
public log() {
console.log(this.constructor.type); // Access actual constructor object
}
}
class B extends A {
protected static type: string = 'B';
}
class C extends A {
protected static type: string = 'C';
}
let b = new B();
b.log(); // => 'B'
let c = new C();
c.log(); // => 'C'
Por defecto, la propiedad constructor
de una instancia es del tipo Function
, pero puede especializarla en una clase declarándola manualmente. Una vez que lo haga, puede acceder a las estáticas a través de this.constructor.xxx
, y obtendrá las propiedades del objeto constructor que realmente creó la instancia (es decir, el objeto constructor derivado).
Comentario más útil
No podemos hacerlo de la manera que sugiere, ya que
this.type
se usa para acceder a una propiedad _instancia_ llamadatype
, no a una propiedad _static_.Sin embargo, su ejemplo funciona si lo escribe de la siguiente manera:
Por defecto, la propiedad
constructor
de una instancia es del tipoFunction
, pero puede especializarla en una clase declarándola manualmente. Una vez que lo haga, puede acceder a las estáticas a través dethis.constructor.xxx
, y obtendrá las propiedades del objeto constructor que realmente creó la instancia (es decir, el objeto constructor derivado).