Apakah ada cara untuk menumpuk kelas di TypeScript. Misalnya saya ingin menggunakannya seperti:
var foo = new Foo();
var bar = new Foo.Bar();
javascript
typescript
basarat
sumber
sumber
Jawaban:
Dimulai dengan TypeScript 1.6 kita memiliki ekspresi kelas ( referensi ).
Artinya, Anda dapat melakukan hal berikut:
class Foo { static Bar = class { } } // works! var foo = new Foo(); var bar = new Foo.Bar();
sumber
Berikut adalah kasus penggunaan yang lebih kompleks menggunakan ekspresi kelas .
Ini memungkinkan kelas dalam untuk mengakses
private
anggota kelas luar.class classX { private y: number = 0; public getY(): number { return this.y; } public utilities = new class { constructor(public superThis: classX) { } public testSetOuterPrivate(target: number) { this.superThis.y = target; } }(this); } const x1: classX = new classX(); alert(x1.getY()); x1.utilities.testSetOuterPrivate(4); alert(x1.getY());
codepen
sumber
Saya tidak bisa mendapatkan ini untuk bekerja dengan kelas yang diekspor tanpa menerima kesalahan kompilasi, sebagai gantinya saya menggunakan ruang nama :
namespace MyNamespace { export class Foo { } } namespace MyNamespace.Foo { export class Bar { } }
sumber
Jika Anda berada dalam konteks file deklarasi tipe, Anda dapat melakukan ini dengan mencampur kelas dan namespace:
// foo.d.ts declare class Foo { constructor(); fooMethod(): any; } declare namespace Foo { class Bar { constructor(); barMethod(): any; } } // ...elsewhere const foo = new Foo(); const bar = new Foo.Bar();
sumber