ES6从对象中导出所有值

说我有一个模块( ./my-module.js )有一个对象,应该是它的返回值:

 let values = { a: 1, b: 2, c: 3 } // "export values" results in SyntaxError: Unexpected token 

所以我可以导入他们,如:

 import {a} from './my-module' // a === 1 import * as myModule from './my-module' // myModule.a === 1 

我发现的唯一方法是对输出进行硬编码:

 export let a = values.a export let b = values.b export let c = values.c // or: export let {a, b, c} = values 

这不是dynamic的。

是否可以导出一个对象的所有值?

似乎并不如此。 从ECMAScript 6模块引用:最后的语法 :

您可能想知道 – 为什么我们需要命名导出,如果我们可以简单地默认导出对象(如CommonJS)? 答案是,你不能通过对象实施一个静态结构,并失去所有相关的优点(在下一节中描述)。

我不能真正推荐这个解决scheme ,但它确实有效。 不是导出一个对象,而是使用命名的导出每个成员。 在另一个文件中,将第一个模块的命名导出导入到一个对象中,并将该对象导出为默认值。 也可以export * from './file1';使用export * from './file1';第一个模块中导出所有命名的export * from './file1';

值/ value.js

 let a = 1; let b = 2; let c = 3; export {a, b, c}; 

值/ index.js

 import * as values from './values'; export default values; export * from './values'; 

index.js

 import values, {a} from './values'; console.log(values, a); // {a: 1, b: 2, c: 3} 1 

我只是需要这样做的configuration文件。

 var config = { x: "CHANGE_ME", y: "CHANGE_ME", z: "CHANGE_ME" } export default config; 

你可以这样做

 import { default as config } from "./config"; console.log(config.x); // CHANGE_ME 

这是使用Typescript记住你。

尝试这个丑陋但可行的解决scheme:

 // use CommonJS to export all keys module.exports = { a: 1, b: 2, c: 3 }; // import by key import { a, b, c } from 'commonjs-style-module'; console.log(a, b, c); 
 export const a = 1; export const b = 2; export const c = 3; 

这将在今天巴贝尔工作中发挥作用,并且只要ES2016模块实际登陆浏览器,就应该利用ES2016模块的所有优点。

您还可以添加export default {a, b, c}; 这将允许你导入所有的值作为一个对象没有* as ,即import myModule from 'my-module';

资料来源: