是否有导出与命名导出和默认导出相同的常量的用例?

Is there a use case for exporting the same const as a named and default export?

问题

我见过一个大型代码库,其中每个包含常量的文件看起来都像这样:

export const DEFAULT_ID = 0;
export const CURRENT_CODE = 'ABC123';

export default {
  DEFAULT_ID,
  CURRENT_CODE
};

他们对所有常量都使用命名导出和默认导出。当谈到常量实际上是如何被导入时,似乎他们通常只是简单地将它们导入为命名导出:

import {CURRENT_CODE} from './whatever.consts';

这种做法有任何用例吗?这很不寻常,因为通常情况下,要么使用命名导出,要么使用默认导出,而不是同时使用两者。

研究

我检查了 this question 希望能深入了解为什么要以这种方式一起使用它们,但我找不到任何东西。

我得到的最接近答案的是 this article。在“为什么将符号公开为默认导出和命名导出?”一节中,他们提供了一个简短示例,说明这如何允许某人使用 import {A, B} from './a' 而不是需要编写一些东西喜欢 import A, {B} from './a'。但是,这个解释对我来说没有意义,因为如果将常量简单地导出为命名导出,则可以使用相同的语法。

我的想法

我能想到的唯一原因是这种方法在导入常量时可以提供更大的灵活性。即,它允许同时使用

import {DEFAULT_ID, CURRENT_CODE} from './whatever.consts';

let id = DEFAULT_ID, code = CURRENT_CODE;

import INITIALIZATION_CONSTS from './whatever.consts';

let id = INITIALIZATION_CONSTS.DEFAULT_ID, code = INITIALIZATION_CONSTS.CURRENT_CODE

用于导入常量。

这是使用这种方法的正当理由吗?是否有任何最佳实践影响?

Is there any use case for this practice?

不是真的。我唯一能想到的是向后兼容性,如果模块是在其他地方使用的库,可能与他们如何转换代码有关。

The only reason I can think of is that this approach can give more flexibility when it comes to importing constants.

不需要默认导出。您可以轻松地将名称空间导入与命名导出一起使用:

import * as INITIALIZATION_CONSTS from './whatever.consts';

let id = INITIALIZATION_CONSTS.DEFAULT_ID, code = INITIALIZATION_CONSTS.CURRENT_CODE