ES6 - 是否有一种优雅的方式来导入所有命名导出而不是默认导出?

时间:2017-05-30 09:54:06

标签: javascript ecmascript-6

我正在寻找一种优雅的方式来导入所有已命名的导出,而不必导入默认值。

在一个文件中,我输出了许多命名常量加上默认值:

// myModule.js
const myDefault = 'my default' 
export const named1 = 'named1' 
export const named2 = 'named2'
// many more named exports - otherwise this would not be an issue...
export default myDefault 

在另一个文件中,我希望能够优雅地导入所有已命名的导出 ,而无需导入默认值:

// anotherFile.js
// this is what I would like to do, but syntax is not supported, right?
import { * as namedOnly } from './myModule'

想要:

// anotherFile.js
import myDefault, * as namedOnly from './myModule' 

因为我不需要anotherFile.js中的默认值,而且我的linting工具让我感到烦恼 已定义但未使用的myDefault。我也不想:

// anotherFile.js
import {
  named1,
  named2,
  ... // many more
} from './myModule'

因为打字太多了。我也想要object.omit默认值:

// anotherFile.js
import omit from 'object.omit'
import * as all from './myModule'
const namedOnly = omit(all, 'default')

感谢您的帮助!

2 个答案:

答案 0 :(得分:20)

"命名"之间没有分离。和"默认"出口。默认导出是一个命名导出,它恰好具有特殊的名称default,以便于通过某种语法使用。

导入所有导出密钥的唯一方法是使用

import * as foo from "foo";

如果有的话,它将包含命名导出default。如果您希望将其从支票中排除,那么您可以按自己的逻辑处理,就像您使用omit()示例一样。

答案 1 :(得分:0)

好的,所以我用lodash! https://lodash.com/docs/4.17.15#omit

import * as MDATA from './Modules.DATA.store';
{ defaultModuleData: _.map(_.omit(MDATA, ['default']), (ModClass) => new ModClass()) }

我不是忠实粉丝,对性能也不友好,但别无选择!