Typescript: Warisan dan anggota statis

Dibuat pada 8 Des 2015  ·  1Komentar  ·  Sumber: microsoft/TypeScript

Saya pikir itu berguna untuk mengakses anggota statis:

  • dari contoh
  • dari sub kelas

Di bawah contoh:

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

Komentar yang paling membantu

Kami tidak dapat melakukannya seperti yang Anda sarankan karena this.type digunakan untuk mengakses properti _instance_ bernama type , bukan properti _static_.

Namun, contoh Anda berfungsi jika Anda menulisnya sebagai berikut:

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'

Secara default properti constructor dari sebuah instance bertipe Function , tetapi Anda dapat mengkhususkannya dalam kelas dengan mendeklarasikannya secara manual. Setelah Anda melakukannya, Anda dapat mengakses statika melalui this.constructor.xxx , dan Anda akan mendapatkan properti dari objek konstruktor yang benar-benar membuat instance (yaitu objek konstruktor turunan).

>Semua komentar

Kami tidak dapat melakukannya seperti yang Anda sarankan karena this.type digunakan untuk mengakses properti _instance_ bernama type , bukan properti _static_.

Namun, contoh Anda berfungsi jika Anda menulisnya sebagai berikut:

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'

Secara default properti constructor dari sebuah instance bertipe Function , tetapi Anda dapat mengkhususkannya dalam kelas dengan mendeklarasikannya secara manual. Setelah Anda melakukannya, Anda dapat mengakses statika melalui this.constructor.xxx , dan Anda akan mendapatkan properti dari objek konstruktor yang benar-benar membuat instance (yaitu objek konstruktor turunan).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat