Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

489
Visualizações
TypeScript con Node.js ESM desacuerdo

Node.js ESM parece funcionar de manera diferente a TypeScript.

Está dando como resultado programas que pasan la verificación de tipo y, sin embargo, fallan en tiempo de ejecución.

paquete.json

 { "dependencies": { "@types/lodash": "^4.0.0", "lodash": "^4.0.0", "typescript": "^4.0.0" }, "type": "module" }

tsconfig.json

 { "compilerOptions": { "module": "es2015" } }

a.ts

 import { partition } from "lodash"; partition([1, 2, 3, 4], n => n % 2);

Correr

 npm install node_modules/.bin/tsc -p . node index.js

Y el programa falla:

 file:///home/paul/test44/index.js:1 import { partition } from "lodash"; ^^^^^^^^^ SyntaxError: Named export 'partition' not found. The requested module 'lodash' 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 'lodash'; const { partition } = pkg; at ModuleJob._instantiate (node:internal/modules/esm/module_job:124:21) at async ModuleJob.run (node:internal/modules/esm/module_job:179:5) at async Loader.import (node:internal/modules/esm/loader:178:24) at async Object.loadESM (node:internal/process/esm_loader:68:5) at async handleMainPromise (node:internal/modules/run_main:63:12)

¿Cómo puedo alinear TypeScript y Node.js ESM para que la verificación de tipos coincida con el comportamiento del tiempo de ejecución?


EDITAR:

He intentado usar typescript@next con "module": "nodenext" .

Ocurre el mismo error.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El problema es que estás mezclando módulos ES y ComonJS; está en el texto del mensaje de error. Este es todavía un concepto relativamente nuevo y es fácil pasarlo por alto cuando esperarías que los módulos... deberían... simplemente funcionar.

TypeScript solo proporciona declaraciones de import , que luego transpilarán al sistema de módulos elegido; en el caso de ESM, no hay mucho que transpilar ya que son sintácticamente similares.

Dado que está transpilando a ESM, el problema no es TypeScript; es el motor subyacente de Node.js y cómo trata los sistemas de módulos mixtos. Ha escrito algo en ESM (concedido, usando TypeScript) y está tratando de importar algo más escrito en CommonJS.

Para ejecutar su código en función de un módulo CommonJS, debe:

  1. Utilice la versión ESM de su dependencia (¡y no todas las dependencias proporcionan una!)
  2. Use module.createRequire() para importar el módulo CommonJS en una forma utilizable

Fuentes:

https://nodejs.org/api/esm.html#no-require-exports-or-moduleexports https://nodejs.org/api/module.html#modulecreaterequirefilename

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda