Search code examples
javascriptimportes6-modules

Import multiple named exports of module into a single object


Suppose I have:

animals.js

import cat from './cat';
import dog from './dog';
import emu from './emu';
import pig from './pig';
import cow from './cow';

export { cat, dog, emu, pig, cow };

In a module that uses animals.js, how can I import only a couple of needed ones into a keyed object? I'd like to be able to do something like:

my-module.js

import { cat, dog } as housePets from './animals';

// housePets == { cat: theCatModule, dog: theDogModule }

But according to my IDE, this syntax is not correct.

Is there a way to do this? Or is the best way to simply import all of them individually, then construct my own objects afterward?


Solution

  • Sadly nothing like that is possible in the ECMA-262 specifications. They only lists these possibilities:

    import defaultExport from "module-name";
    import * as name from "module-name";
    import { export1 } from "module-name";
    import { export1 as alias1 } from "module-name";
    import { export1 , export2 } from "module-name";
    import { foo , bar } from "module-name/path/to/specific/un-exported/file";
    import { export1 , export2 as alias2 , [...] } from "module-name";
    import defaultExport, { export1 [ , [...] ] } from "module-name";
    import defaultExport, * as name from "module-name";
    import "module-name";
    var promise = import("module-name");
    

    Best that you can do (only add a single line) is the following:

    import { cat, dog } from './animals';
    const housePets = { cat, dog };