考虑到我有两个带有大量命名导出的导入(太多,无法全部写出),我希望将这些导入重新导出,但其中的几个除外。在我的例子中,这是因为一些出口发生了碰撞。
作为我想要存档的一个例子,让我们假设我们有两个文件:
foo.js
export const a = 1;
export const b = 2;bar.js
export const b = 1;
export const c = 3;如果我想使用CommonJS聚合和再导出它们,我可以这样做:
/* use rest destructuring to put everything except "b" into variable "foo" */
const { b, ...foo } = require("./foo");
const bar = require("./bar");
module.exports = {
...foo,
...bar
};当我使用类型记录时,我得到的最接近的是以类似的方式使用export = { ... }:
import * as foo from "./foo";
import * as bar from "./bar";
const { b, ...foo2 } = foo;
export = {
...foo2,
...bar,
};不过,据我理解,这将创建一个带有CommonJS module.exports的文件,而不是一个正确的ESM模块(并且可能需要esModuleInterop)。这是一个类型文本结构,在编写香草JS时不可用。
是否有一种方法可以使用ESM import / export来存档?
发布于 2022-06-03 09:12:41
是否有一种方法可以使用ESM导入/导出来存档?
不,不是在纯标准的ESM中,不是不做您想要避免的事情:列出指定的导出。在ESM import/export中没有"rest“概念。
我想您知道这一点,但是您可以导出一个具有a、b和c属性的对象,但这与重新导出命名的导出完全不同。它不是实时绑定,导入其部件的语法与导入命名导出不同(除非涉及构建时工具(如TypeScript或绑定器等))。
只是FWIW,如下所示(它非常类似于您的TypeScript版本,接近尾声),但我不认为这是您想要的:
reexport.js
import * as foo from "./foo.js";
import * as bar from "./bar.js";
const { b, ...restOfFoo } = foo;
export default {
...restOfFoo,
...bar,
};然后使用它是:
// Import the object (which is the default export)
import stuff from "./reexport.js";
// Destructure into local vars (optional, but...)
const { a, b, c } = stuff;
// Use it...
console.log(a, b, c);这都是标准的ESM。
https://stackoverflow.com/questions/72487144
复制相似问题