【问题标题】:Is there a use case for exporting the same const as a named and default export?是否有导出与命名和默认导出相同的 const 的用例?
【发布时间】:2020-03-30 15:57:51
【问题描述】:

问题

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

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

用于导入常量。

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

【问题讨论】:

  • 特别是什么代码库?你问过作者吗?

标签: javascript ecmascript-6 es6-modules


【解决方案1】:

这种做法有什么用例吗?

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 2022-01-18
    • 1970-01-01
    • 2020-02-03
    • 2017-07-09
    • 2016-08-02
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    相关资源
    最近更新 更多