Acho que é útil para acessar membros estáticos:
Abaixo um exemplo:
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'
Não podemos fazer isso da maneira que você sugeriu, pois this.type
é usado para acessar uma propriedade _instance_ chamada type
, não uma propriedade _static_.
No entanto, seu exemplo funcionará se você escrevê-lo da seguinte maneira:
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 padrão, a propriedade constructor
de uma instância é do tipo Function
, mas você pode especializá-la em uma classe declarando-a manualmente. Depois de fazer isso, você pode acessar a estática por meio de this.constructor.xxx
e obterá as propriedades do objeto construtor que realmente criou a instância (ou seja, o objeto construtor derivado).
Comentários muito úteis
Não podemos fazer isso da maneira que você sugeriu, pois
this.type
é usado para acessar uma propriedade _instance_ chamadatype
, não uma propriedade _static_.No entanto, seu exemplo funcionará se você escrevê-lo da seguinte maneira:
Por padrão, a propriedade
constructor
de uma instância é do tipoFunction
, mas você pode especializá-la em uma classe declarando-a manualmente. Depois de fazer isso, você pode acessar a estática por meio dethis.constructor.xxx
e obterá as propriedades do objeto construtor que realmente criou a instância (ou seja, o objeto construtor derivado).