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

问题描述 投票:0回答:3

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

在一个文件中,我导出许多命名常量以及默认值:

// 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')

感谢您的帮助!

javascript ecmascript-6
3个回答
39
投票

“命名”和“默认”导出之间没有区别。默认导出是命名导出,它恰好具有名称

default
,这是为了便于某些语法使用而进行特殊处理的。

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

import * as foo from "foo";

并且这将包括命名的导出

default
(如果有的话)。如果您希望将其从检查中排除,则需要您按照自己的逻辑进行处理,就像您对
omit()
示例所做的那样。


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()) }

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


0
投票

我使用的是typescript 4.3.5,现在看来问题已经解决了。我从我的 linter 中得到这个:

'export *' does not re-export a default.

© www.soinside.com 2019 - 2024. All rights reserved.