Modul - Ist es in TypeScript möglich, * als foo zu exportieren
Ich kann:
import * as foo from './foo'
Aber kann scheinbar nicht dasselbe exportieren:
export * as foo from './foo'
Das scheint auch nicht zu funktionieren...:
import * as fooImport from './foo';
export const foo = fooImport;
Irgendwelche Ideen?
--- AKTUALISIERUNG ---
Was versuchen Sie zu erreichen?
Im Grunde arbeite ich daran, ein ngrx/store Backend für meine App zu implementieren. Ich möchte meinen Code folgendermaßen organisieren:
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
Und ich möchte meine index.ts-Dateien verwenden, um alle Exporte aus jedem Unterbereich zu verketten (übliches Paradigma).
Ich möchte die Dinge jedoch namespaced behalten. Jede meiner xxx-reducer.ts- und xxx-actions.ts-Dateien hat Exporte mit demselben Namen (reducer, ActionTypes, Actions, ...), sodass normales Verketten zu einem Namenskonflikt führen würde. Was ich versuche, ist, alle Exporte von xxx-actions und xxx-reducer als re-exported unter xxx zu ermöglichen. Das würde es mir erlauben:
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());
}
Statt des ausführlicheren:
import * as viewer from './core/viewer';
import * as viewerData from './core/viewer-data';
...
Das ist sowieso der Kernpunkt...
Antwort #1
TypeScript 3.8 oder höher
Siehe https://stackoverflow.com/a/59712387/1108891 für Details.
Vor TypeScript 3.7 oder früher
Ist es möglich, * als foo in TypeScript zu exportieren
Nein. Sie können jedoch einen zweistufigen Prozess verwenden:
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 und src/core/bar/index.ts
export * from "./baz";
export * from "./bop";
src/core/foo/baz.ts und src/core/bar/baz.ts
export class Baz {
}
src/core/foo/bop.ts und src/core/bar/bop.ts
export class Bop {
}
Siehe auch: https://www.typescriptlang.org/docs/handbook/modules.html
Antwort #2
Seit der Veröffentlichung von TypeScript 3.8 können Sie Aliasnamen für Ihre Exporte hinzufügen.
Beispiel :
export * as utilities from "./utilities.js";
Ref: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html
