modul - Este posibil să exporți * ca foo în TypeScript


Pot:

import * as foo from './foo'

Dar nu par să pot să export la fel:

export * as foo from './foo'

Se pare că nici asta nu funcționează...:

import * as fooImport from './foo';
export const foo = fooImport;

Vreo idee?

--- ACTUALIZARE ---

Ce încerci să realizezi?

Practic, lucrez la implementarea unui backend ngrx/store pentru aplicația mea. Vreau să îmi organizez codul astfel:

app/core/
  index.ts
  viewer/
    index.ts
    viewer-actions.ts
    viewer-reducer.ts
  view-data/
    index.ts
    view-data-actions.ts
    view-data-reducer.ts

Și vreau să folosesc fișierele mele index.ts pentru a lega toate exporturile din fiecare subset (paradigmă comună).

Totuși, vreau să păstrez lucrurile încadrate în spații de nume. Fiecare dintre fișierele mele xxx-reducer.ts și xxx-actions.ts au exporturi cu același nume (reducer, ActionTypes, Actions, ...) astfel că lanțuirea normală ar rezulta într-un conflict de nume. Ceea ce încerc să fac este să permit ca toate exporturile din xxx-actions și xxx-reducer să fie reexportate ca xxx. Aceasta mi-ar permite să:

import { viewer, viewerData } from './core';

...
    private viewer: Observable<viewer.Viewer>;
    private viewData: Observable<viewData.ViewData>;

    ngOnInit() {
        this.viewer = this.store.let(viewer.getViewer());
        this.viewData = this.store.let(viewData.getViewData());
    }

În loc de versiunea mai verbară:

import * as viewer from './core/viewer';
import * as viewerData from './core/viewer-data';

...

Asta e esența oricum...

Răspuns #1

TypeScript 3.8 sau ulterior

Vezi https://stackoverflow.com/a/59712387/1108891 pentru detalii.

Înainte de TypeScript 3.7 sau anterior

Este posibil să exporți * ca foo în TypeScript

Nu. Cu toate acestea, poți folosi un proces în doi pași:

src/core/index.ts

import * as Foo from "./foo";
import * as Bar from "./bar";

export {
    Foo,
    Bar,
}

src/index.ts

import { Foo, Bar } from "./core";

function FooBarBazBop() {
    Foo.Baz;
    Foo.Bop;
    Bar.Baz;
    Bar.Bop;
}

src/core/foo/index.ts și src/core/bar/index.ts

export * from "./baz";
export * from "./bop";

src/core/foo/baz.ts și src/core/bar/baz.ts

export class Baz {

}

src/core/foo/bop.ts și src/core/bar/bop.ts

export class Bop {

}

Vezi de asemenea: https://www.typescriptlang.org/docs/handbook/modules.html

Răspunsul #2

De când TypeScript 3.8 a fost lansat, poți să adaugi un alias pentru exporturile tale.

Exemplu :

export * as utilities from "./utilities.js";

Ref: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html