Dado que tengo dos importaciones con muchas exportaciones con nombre (demasiadas para escribirlas todas) y quiero volver a exportarlas excepto algunas. En mi caso esto se debe a que chocan algunas exportaciones.
Como ejemplo de lo que quiero archivar, supongamos que tenemos dos archivos:
foo.js :
export const a = 1; export const b = 2; bar.js :
export const b = 1; export const c = 3;Si quiero agregarlos y volver a exportarlos usando CommonJS, podría hacer algo como esto:
/* use rest destructuring to put everything except "b" into variable "foo" */ const { b, ...foo } = require("./foo"); const bar = require("./bar"); module.exports = { ...foo, ...bar }; Como estoy usando mecanografiado, lo más cerca que he estado es usar export = { ... } de manera similar:
import * as foo from "./foo"; import * as bar from "./bar"; const { b, ...foo2 } = foo; export = { ...foo2, ...bar, }; Sin embargo, tengo entendido que esto creará un archivo con CommonJS module.exports en lugar de un módulo ESM adecuado (y probablemente requiera esModuleInterop ). Y es una construcción mecanografiada y no está disponible al escribir Vanilla JS.
¿Hay alguna forma de archivar esto mediante la import / export de ESM?
¿Hay alguna forma de archivar esto mediante la importación/exportación de ESM?
No, no en ESM estándar puro, no sin hacer lo que intenta evitar: enumerar las exportaciones nombradas. No existe el concepto de "descanso" en la import / export de ESM.
Creo que lo sabe, pero podría exportar un objeto con propiedades para a , b y c , pero eso es muy diferente de volver a exportar exportaciones con nombre. No sería un enlace en vivo, y la sintaxis para importar sus partes es diferente de importar exportaciones con nombre (a menos que se involucren herramientas en tiempo de compilación como TypeScript o empaquetadores, etc.).
Solo FWIW, así es como se ve (es muy similar a su versión de TypeScript cerca del final), pero no creo que sea lo que quiere:
reexport.js :
import * as foo from "./foo.js"; import * as bar from "./bar.js"; const { b, ...restOfFoo } = foo; export default { ...restOfFoo, ...bar, };Entonces usarlo es:
// 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);Eso es todo ESM estándar.