Gibt es eine Möglichkeit, Klassen in TypeScript zu verschachteln? ZB möchte ich sie verwenden wie:
var foo = new Foo();
var bar = new Foo.Bar();
javascript
typescript
Basarat
quelle
quelle
Antworten:
Ab TypeScript 1.6 haben wir Klassenausdrücke ( Referenz ).
Dies bedeutet, dass Sie Folgendes tun können:
class Foo { static Bar = class { } } // works! var foo = new Foo(); var bar = new Foo.Bar();
quelle
Hier ist ein komplexerer Anwendungsfall mit Klassenausdrücken .
Es ermöglicht der inneren Klasse , auf die
private
Mitglieder der äußeren Klasse zuzugreifen .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
quelle
Ich konnte dies nicht mit exportierten Klassen zum Laufen bringen, ohne einen Kompilierungsfehler zu erhalten. Stattdessen habe ich Namespaces verwendet :
namespace MyNamespace { export class Foo { } } namespace MyNamespace.Foo { export class Bar { } }
quelle
Wenn Sie sich im Kontext einer Typdeklarationsdatei befinden, können Sie dazu Klassen und Namespaces mischen:
// 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();
quelle