Tengo esto como mi constructor de funciones:
prueba.js
const myConstructor = function(){ this.hi = 'hi' console.log(this.hi) } export default myConstructor Y estoy tratando de await import() en test2.js:
prueba2.js
const test = await import('./test.js') new test() Esto falla con TypeError: test is not a constructor .
Sin embargo, si lo importo normalmente, funciona bien:
prueba2.js
import test from './test.js' //const test = await import('./test.js') new test() ^^ imprime hi en la consola.
¿Que esta pasando aqui? ¿Por qué los dos enfoques se comportan de manera tan diferente para las funciones constructoras? Esto no parece suceder para las funciones normales.
Tuve que solucionar esto llamando a la función constructora directamente dentro del módulo de función constructora, y esto no es lo ideal.
Devoluciones de importación dinámicas :
Devuelve una promesa que cumple con un objeto que contiene todas las exportaciones de moduleName, con la misma forma que una importación de espacio de nombres (
import * as name from moduleName): un objeto con prototipo nulo y la exportación predeterminada disponible como una clave denominada default.
Si su Promesa solo se resolvió en la exportación predeterminada, no podría usar ninguna exportación con nombre que pueda tener. Así que tú necesitas:
const testNamespace = await import('./test.js') new testNamespace.default()El módulo de devolución de importación asíncrona, por lo que debe usar la propiedad .default para acceder a la exportación predeterminada del módulo.
const test = await import('./test.js').default new test()