Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

624
Vistas
Exportación con nombre 'Tipos' no encontrados. El módulo solicitado 'mongoose' es un módulo CommonJS, que puede no admitir todas las exportaciones de módulos como exportaciones con nombre

Tengo un servidor express escrito en mecanografiado con "module": "es2020" en su tsconfig.

También desarrollé otro módulo es2020 para mi API de graphql, todavía en mecanografiado, y este módulo usa mongoose con importaciones con ese nombre:

 import { Types } from 'mongoose'

Todo funciona bien cuando compilo mi módulo graphql con tsc . Pero el servidor express que se ejecuta con

nodemon --watch './**/*.ts' --exec 'node --experimental-specifier-resolution=node --loader ts-node/esm' src/index.ts

no puede manejar la mangosta llamada import.

 import { Types } from 'mongoose'; ^^^^^ SyntaxError: Named export 'Types' not found. The requested module 'mongoose' is a CommonJS module, which may not support all module.exports as named exports. CommonJS modules can always be imported via the default export, for example using: import pkg from 'mongoose'; const { Types } = pkg;

Solución #1

 import mongoose from 'mongoose'

Y reemplace Types por mongoose.Types .

Pero dado que tsc puede manejar la importación llamada mongoose, espero que también sea posible hacer que ts-node pueda hacerlo.

Solución #2

Cambie a commonjs , puedo mantener la sintaxis de importación/exportación en mi módulo graphql y compilarlo como un módulo cjs. Pero tendría que usar una sintaxis cjs en mi servidor express, y no quiero hacerlo.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

TL;DR

Todo lo que tiene que hacer es quitar las llaves de los Tipos. Eso debería funcionar. Así como esto:

 import Types from 'mongoose'

Pero el nombre no importa.

Explicación

import Types from 'mongoose' funciona porque estamos importando la exportación predeterminada del paquete (es por eso que el nombre que usamos no importa).

Sin embargo, cuando import * as Types from 'mongoose , le dice a JS que realmente quiere todo tal como está. Eso significa que en lugar de obtener la exportación predeterminada:

 { "function1": {}, "function2": {} }

Obtienes esto:

 { "default": { "function1": {}, "function2": {} } }

Entonces, también podría haber hecho Types.default pero probablemente no sea tan limpio. 🙂

Esta publicación de StackOverflow sugiere que podríamos hacer que ambos funcionen, pero también sugiere que sería una solución alternativa que probablemente no debería funcionar 😓

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda