Disons que j'ai un module ( ./my-module.js
) qui a un objet qui devrait être sa valeur de retour:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
Je peux donc les importer comme:
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
Le seul moyen que j'ai trouvé est de coder en dur les exportations:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
Ce qui n'est pas dynamique.
Est-il possible d'exporter toutes les valeurs d'un objet?
module
export
ecmascript-6
Mauvm
la source
la source
interface { a: number, b: number, c: number }
? Théoriquement, cela devrait être possible, non?export const {a, b, c} = values
est précisément la syntaxe pour déclarer cette interface statiqueRéponses:
Cela ne semble pas. Citation des modules ECMAScript 6: la syntaxe finale :
la source
Je ne peux pas vraiment recommander cette
solutionde contournement, mais elle fonctionne. Plutôt que d'exporter un objet, vous utilisez des exportations nommées de chaque membre. Dans un autre fichier, importez les exportations nommées du premier module dans un objet et exportez cet objet par défaut. Exportez également toutes les exportations nommées du premier module en utilisantexport * from './file1';
values / value.js
values / index.js
index.js
la source
{ a, b, c }
, pourquoi dois-je exporter à nouveau? La vraie question est: que se passe-t-il si je n'aiconst obj = { a, b, c }
et puis-je exporter tous les membres des obj? Je suppose que la réponse est NON.essayez cette solution laide mais réalisable:
la source
J'avais juste besoin de le faire pour un fichier de configuration.
Tu peux le faire comme ça
Ceci est en utilisant Typescript, pensez-vous.
la source
import config from './config';
Cela fonctionnera avec les transformations Babel aujourd'hui et devrait profiter de tous les avantages des modules ES2016 chaque fois que cette fonctionnalité atterrit dans un navigateur.
Vous pouvez également ajouter
export default {a, b, c};
ce qui vous permettra d'importer toutes les valeurs en tant qu'objet sans le* as
, ieimport myModule from 'my-module';
Sources:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
http://www.2ality.com/2014/09/es6-modules-final.html
la source
Je suggère ce qui suit, attendons un module.js :
et puis vous pouvez faire dans un index.js :
Plus d'exemples d'objets de destruction: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
la source
Chaque réponse nécessite la modification des instructions d'importation.
Si vous souhaitez pouvoir utiliser:
comme dans la question, et dans votre
my-module
vous avez tout ce dont vous avez besoin pour exporter dans un seul objet (ce qui peut être utile par exemple si vous voulez valider les valeurs exportées avec Joi ou JSON Schema) alors votremy-module
devrait être soit:Ou:
Pas joli, mais il compile ce dont vous avez besoin.
Voir: l' exemple de Babel
la source
Vous pouvez faire beaucoup de choses stupides avec javascript. Je laisserai ici cette citation du livre YDKJS.
Page du livre mentionnée ->
https://books.google.com.tr/books?id=iOc6CwAAQBAJ&pg=PT150&lpg=PT150&dq=JS+engine+cannot+stately+analyze+the+contents+of+plain+object&source=bl&ots=7v8fMUgwhxBko&pYWaXP3&pYWaXko&pYWaXko3 X & ved = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ # v = onepage & q = JS% 20engine% 20cannot% 20statiquement% 20analyze% 20the% 20contents% 20of% 20plain% 20object & f = false
la source
Exporter chaque variable de votre fichier de variables. Ensuite, les importer avec * comme dans votre autre fichier et les exporter en tant que constante à partir de ce fichier vous donnera un objet dynamique avec les exportations nommées du premier fichier étant des attributs sur l'objet exporté à partir du second.
Variables.js
Other.js
Third.js
la source