【问题标题】:How to save destructured import as properties of one object?如何将解构导入保存为一个对象的属性?
【发布时间】:2018-05-14 10:03:29
【问题描述】:

我的场景是@/helpers/filters 具有函数 A、B、C、D、E、F...,我只需要 A、B、C,并希望将其保留在 1 个对象 filters 中,而不是作为单独的值 A、B、C。

我可以分两步完成:

import {
    A, B, C
} from '@/helpers/filters';

let filters = {
    A, B, C
};

但宁愿将其简化为:

import {
    A, B, C
} as filters from '@/helpers/filters';

但是这个语法被突出显示为“表达式语句不是赋值或调用”。

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

(目前)没有这样的语法。您的选择是:

  1. 创建一个仅导入 A、B 和 C 然后导出它们的模块(可能是 @/helpers/abcfilters):

    export { A, B, C } from '@/helpers/filters';
    

    ...然后改用该模块:

    import * as filters from '@/helpers/abcfilters';
    
  2. 使用import * as filters from '@/helpers/filters';,不要使用你不需要的东西。

  3. 单独导入 A、B 和 C。如果你想,在导入它们之后,你可以将它们的值添加到一个对象中,然后使用该对象,但要注意,如果你有任何循环依赖,你最初收到的 A、B 和 C 可能还没有它们的最终值. (当然,即使您没有循环引用,模块导出也可以随着时间的推移被导出模块修改,尽管在实践中这样做相对较少。)

【讨论】:

  • 不要使用你不需要的东西 - 因为这取决于环境,所以未使用的过滤器有可能不会被摇树。跨度>
  • @estus - 是的,有这个机会,虽然随着模块成为本地模块,但机会减少了...... :-) 尽管如此,我真的应该将最后一个移到列表的顶部,应该不是吗? (编辑:完成。)
  • 选项 nr 1 似乎是最干净的,但也会增加大部分开销并将我的模块的依赖项移动到其他模块(abcfilters),这不太方便管理。选项 nr 3 基本上就是我尝试过的,对吧?或者我可以将它与 nr 2 混合(导入所有内容并将所需的功能添加到 Object,filters = {a: filtersAll.a, b: filtersAll.b})。
  • @van_folmert:我没有看到您列出的#1 的问题;所有模块都有依赖关系。我想它增加了一层,但没什么好担心的。是的,#2 就是你所描述的。你可以把#3 和#2 结合起来,但可以说你会得到两全其美的结果。 :-)
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 2018-11-04
  • 2015-08-31
  • 2022-11-10
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
相关资源
最近更新 更多