Existe-t-il un moyen d'imbriquer des classes dans TypeScript. Par exemple, j'aimerais les utiliser comme:
var foo = new Foo();
var bar = new Foo.Bar();
javascript
typescript
basarat
la source
la source
Réponses:
À partir de TypeScript 1.6, nous avons des expressions de classe ( référence ).
Cela signifie que vous pouvez effectuer les opérations suivantes:
class Foo { static Bar = class { } } // works! var foo = new Foo(); var bar = new Foo.Bar();
la source
Voici un cas d'utilisation plus complexe utilisant des expressions de classe .
Il permet à la classe interne d'accéder aux
private
membres de la classe externe.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
la source
Je ne pouvais pas faire fonctionner cela avec les classes exportées sans recevoir une erreur de compilation, à la place j'ai utilisé des espaces de noms :
namespace MyNamespace { export class Foo { } } namespace MyNamespace.Foo { export class Bar { } }
la source
Si vous êtes dans le contexte d'un fichier de déclaration de type, vous pouvez le faire en mélangeant des classes et des espaces de noms:
// 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();
la source