Typescript: Héritage et membres statiques

Créé le 8 déc. 2015  ·  1Commentaire  ·  Source: microsoft/TypeScript

Je pense que c'est utile pour accéder aux membres statiques :

  • à partir d'instances
  • des sous-classes

Ci-dessous un exemple :

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

Commentaire le plus utile

Nous ne pouvons pas procéder comme vous le suggérez car this.type est utilisé pour accéder à une propriété _instance_ nommée type , pas une propriété _static_.

Cependant, votre exemple fonctionne si vous l'écrivez comme suit :

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'

Par défaut, la propriété constructor d'une instance est de type Function , mais vous pouvez la spécialiser dans une classe en la déclarant manuellement. Une fois que vous faites cela, vous pouvez accéder à la statique via this.constructor.xxx , et vous obtiendrez les propriétés de l'objet constructeur qui a réellement créé l'instance (c'est-à-dire l'objet constructeur dérivé).

>Tous les commentaires

Nous ne pouvons pas procéder comme vous le suggérez car this.type est utilisé pour accéder à une propriété _instance_ nommée type , pas une propriété _static_.

Cependant, votre exemple fonctionne si vous l'écrivez comme suit :

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'

Par défaut, la propriété constructor d'une instance est de type Function , mais vous pouvez la spécialiser dans une classe en la déclarant manuellement. Une fois que vous faites cela, vous pouvez accéder à la statique via this.constructor.xxx , et vous obtiendrez les propriétés de l'objet constructeur qui a réellement créé l'instance (c'est-à-dire l'objet constructeur dérivé).

Cette page vous a été utile?
0 / 5 - 0 notes