我不时想做一件具体的事情,我无法弄清楚:
假设module1.js
导出3个值:
//module1.js
export const a = 'a';
export const b = 'b';
export const c = 'c';
然后,在module2.js
中,我想将两个导入到一个对象中(作为一种命名空间):
//module2.js
import { a, c } as constants from './module1'; //<-WRONG!
所以我最终做的就是这样:
//module2.js
import { a, c } from './module1';
const constants = { a, c };
这样做有效,但现在a
和c
都存在于constants
中,也直接存在于模块范围内。
有没有办法避免这种情况?
答案 0 :(得分:3)
你的意思是
import * as constants from './module1';
如果您需要传递它们,也可以删除一些,例如lodash pick
const cleanConstants = _.pick(['a', 'c'], constants);
答案 1 :(得分:2)
根据MDN documentation,您可以在整个模块内容(例如* as constants
)或单个内容(例如b as constants
)上设置别名。但是您无法在特定内容上设置别名。因此,其中一个解决方案是使用*。
import * as constants from './module1';
另一种可能的解决方案是将{ a, c }
作为默认值传递。
//module1.js
export const a = ...
export const b = ...
export const c = ...
export const d = ...
export default { a, b, c };
/module2.js
import contants from './someModule';
doStuff(constatns);
最后,如果您不想将这些常量作为默认值传递,则可以创建一个对象并传递该对象。
//module1.js
export const a = ...
export const b = ...
export const c = ...
export const b = ...
export const myCustomConstants = { a, c };
//module2.js
import { myCustomConstants } from './someModule';
doStuff(myCustomConstants);