Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

623
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!