将模块的多个命名导出导入单个对象

Import multiple named exports of module into a single object

假设我有:

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 };

在使用 animals.js 的模块中,我如何才能只将几个需要的导入到键控对象中?我希望能够做类似的事情:

我的-module.js

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

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

但是根据我的IDE,这个语法是不正确的。

有办法吗?或者最好的方法是简单地单独导入所有对象,然后再构建我自己的对象?

遗憾的是,在 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");

你能做的最好的(只添加一行)是:

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

正如 @johannchopin 在他们的回答中提到的,根据最新规范,这是不可能的。但是,如果您想以单个键名从文件中导入所有导出,您可以尝试这样的操作 -

foo.js

const a = '123';
const b = 123;

export default { a, b };

bar.js

import KeyName from './temp';

console.log(KeyName.a, KeyName.b);

如果您计划在其他模块中使用 housePets,那么也可以将 housePets 作为 animals.js

的一部分导出

animals.js

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

const housePets = { cat, dog }

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

my-module.js

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

console.log(cat);
console.log(dog);
console.log(housePets);