Website-Suche

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

Verwandte Artikel