Javascript 如何将解构导入保存为一个对象的属性?

Javascript 如何将解构导入保存为一个对象的属性?,javascript,ecmascript-6,Javascript,Ecmascript 6,我的场景是,@/helpers/filters具有函数A、B、C、D、E、F。。。我只需要A,B,C,并希望将其保存在1个对象过滤器中,而不是作为单独的值A,B,C 我可以分两步完成: import { A, B, C } from '@/helpers/filters'; let filters = { A, B, C }; 但更愿意将其简化为: import { A, B, C } as filters from '@/helpers/filters'; 但这种

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

我可以分两步完成:

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

let filters = {
    A, B, C
};
但更愿意将其简化为:

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

但这种语法被高度化为“表达式语句不是赋值或调用”。

目前还没有这样做的语法。你的选择是:

  • 创建一个模块(可能是
    @/helpers/abcfilters
    ),只导入a、B和C,然后导出它们:

    export { A, B, C } from '@/helpers/filters';
    
    …然后改用该模块:

    import * as filters from '@/helpers/abcfilters';
    
  • 使用“@/helpers/filters”中的
    import*作为筛选器并且不要使用你不需要的东西

  • 分别导入A、B和C。如果您愿意,在导入它们之后,您可以将它们的值添加到对象中,然后使用该对象,但是请注意,如果您有任何循环依赖项,那么您最初收到的A、B和C可能还没有它们的最终值。(当然,即使没有循环引用,导出模块也可以随着时间的推移修改模块导出,尽管在实践中很少这样做。)


  • import
    语句应该是静态分析的,并且只支持。如果它不在那里,你可以确定它不受支持。只是不要使用你不需要的东西-因为这取决于环境,不使用的过滤器有可能不会被树震动。@estus-是的,有这种可能性,尽管随着模块本机化,这种可能性会降低…:-)不过,我真的应该把最后一个移到列表的顶部,不是吗?(编辑:完成。)选项nr 1似乎是最干净的,但也会增加大部分开销,并将我的模块的依赖项移动到其他模块(ABCFilter),这将不太方便管理。选项nr 3基本上就是我尝试的,对吗?或者我可以将它与NR2混合使用(导入所有内容并向对象添加所需的函数,
    filters={a:filtersAll.a,b:filtersAll.b}
    )。@van_folmert:我看不出您列出的#1有什么问题;所有模块都有依赖项。我想它增加了一层,但没什么好担心的。是的,#2就是你所描述的。你可以将#3和#2结合起来,但可以说,你会在这两个世界中得到最坏的结果。:-)