Angenommen, ich habe ein Modul ( ./my-module.js
) mit einem Objekt, dessen Rückgabewert sein sollte:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
So kann ich sie importieren wie:
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
Der einzige Weg, den ich gefunden habe, ist die harte Codierung der Exporte:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
Welches ist nicht dynamisch.
Ist es möglich, alle Werte aus einem Objekt zu exportieren?
module
export
ecmascript-6
Mauvm
quelle
quelle
interface { a: number, b: number, c: number }
? Theoretisch sollte es möglich sein, oder?export const {a, b, c} = values
ist genau die Syntax, um diese statische Schnittstelle zu deklarierenAntworten:
Scheint nicht so. Zitat aus ECMAScript 6-Modulen: die endgültige Syntax :
quelle
Ich kann diese
Lösungnicht wirklich empfehlen, aber sie funktioniert. Anstatt ein Objekt zu exportieren, verwenden Sie benannte Exporte für jedes Mitglied. Importieren Sie in einer anderen Datei die benannten Exporte des ersten Moduls in ein Objekt und exportieren Sie dieses Objekt standardmäßig. Exportieren Sie auch alle genannten Exporte aus dem ersten Modul mitexport * from './file1';
values / value.js
values / index.js
index.js
quelle
{ a, b, c }
, warum muss ich dann erneut exportieren? Die eigentliche Frage ist, was ist, wenn ich nurconst obj = { a, b, c }
alle Mitglieder von obj exportieren kann und kann? Ich denke die Antwort ist NEIN.Versuchen Sie diese hässliche, aber praktikable Lösung:
quelle
Ich musste dies nur für eine Konfigurationsdatei tun.
Sie können es so machen
Dies verwendet wohlgemerkt Typescript.
quelle
import config from './config';
Dies funktioniert heute mit Babel-Transformationen und sollte alle Vorteile von ES2016-Modulen nutzen, wenn diese Funktion tatsächlich in einem Browser landet.
Sie können auch hinzufügen,
export default {a, b, c};
wodurch Sie alle Werte als Objekt ohne das importieren können* as
, d. H.import myModule from 'my-module';
Quellen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
http://www.2ality.com/2014/09/es6-modules-final.html
quelle
Ich schlage Folgendes vor, erwarten wir ein module.js :
und dann können Sie in einer index.js tun :
Weitere Beispiele für die Zerstörung von Objekten: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
quelle
Jede Antwort erfordert eine Änderung der Importanweisungen.
Wenn Sie verwenden möchten:
Wie in der Frage, und in Ihrem haben
my-module
Sie alles, was Sie zum Exportieren benötigen, in einem Objekt (was nützlich sein kann, z. B. wenn Sie die exportierten Werte mit Joi oder JSON Schema validieren möchten), dannmy-module
müssten Sie entweder:Oder:
Nicht schön, aber es kompiliert nach Ihren Wünschen.
Siehe: Babel Beispiel
quelle
Mit Javascript kann man viel Dummes machen. Ich werde dieses Zitat hier aus dem YDKJS-Buch hinterlassen.
Erwähnte Seite des Buches ->
https://books.google.com.tr/books? X & ved = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ
quelle
Exportieren Sie jede Variable aus Ihrer Variablendatei. Wenn Sie sie dann wie in Ihrer anderen Datei mit * importieren und als Konstante aus dieser Datei exportieren, erhalten Sie ein dynamisches Objekt, wobei die benannten Exporte aus der ersten Datei Attribute für das aus der zweiten exportierte Objekt sind.
Variables.js
Other.js
Third.js
quelle