Есть ли способ вкладывать классы в TypeScript. Например, я бы хотел использовать их как:
var foo = new Foo();
var bar = new Foo.Bar();
javascript
typescript
басарат
источник
источник
Ответы:
Начиная с TypeScript 1.6 у нас есть выражения классов ( ссылка ).
Это означает, что вы можете делать следующее:
class Foo { static Bar = class { } } // works! var foo = new Foo(); var bar = new Foo.Bar();
источник
Вот более сложный вариант использования с использованием выражений классов .
Это позволяет внутреннему классу получать доступ к
private
членам внешнего класса.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());
кодовый ключ
источник
Я не мог заставить это работать с экспортированными классами без получения ошибки компиляции, вместо этого я использовал пространства имен :
namespace MyNamespace { export class Foo { } } namespace MyNamespace.Foo { export class Bar { } }
источник
Если вы находитесь в контексте файла объявления типа, вы можете сделать это, смешав классы и пространства имен:
// 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();
источник