Typescript: Herencia y miembros estáticos

Creado en 8 dic. 2015  ·  1Comentario  ·  Fuente: microsoft/TypeScript

Creo que es útil para acceder a miembros estáticos:

  • de instancias
  • de subclases

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'
By Design Declined Suggestion

Comentario más útil

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).

>Todos los comentarios

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).

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Antony-Jones picture Antony-Jones  ·  3Comentarios

kyasbal-1994 picture kyasbal-1994  ·  3Comentarios

manekinekko picture manekinekko  ·  3Comentarios

MartynasZilinskas picture MartynasZilinskas  ·  3Comentarios

zhuravlikjb picture zhuravlikjb  ·  3Comentarios