Je pense que c'est utile pour accéder aux membres statiques :
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'
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é).
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éetype
, pas une propriété _static_.Cependant, votre exemple fonctionne si vous l'écrivez comme suit :
Par défaut, la propriété
constructor
d'une instance est de typeFunction
, 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 viathis.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é).