🔍 Search Terms
TS1479 is "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic import call instead."
But require(ESM) is now supported -- under --experimental-require-module in node 20.x and 22.x and by default in node 23.x -- providing that the module graph contains no top-level await. So TypeScript needs a way to disable TS1479 when a user can assert that this is the case.
✅ Viability Checklist
⭐ Suggestion
"module": "nodenext" should disable TS1479.
📃 Motivating Example
Prototype blog post announcement:
In CJS packages whose tsconfig specifies "module": "nodenext", TypeScript will no longer produce an error when requiring a module known to be ESM.
For example, the following will now work:
module_a/package.json:
module_a/foo.js:
module_a/package.json:
(no "type": "module")
module_b/tsconfig.json:
{
"compilerOptions": {
"module": "nodenext"
}
}
module_b/foo.ts:
import foo from "module_a/foo"
💻 Use Cases
- What do you want to use this for?
Interoperability between ESM and CJS.
- What shortcomings exist with current approaches?
TypeScript does not allow CJS to require(ESM), even when it is supported by node.
- What workarounds are you using in the meantime?
Have to avoid doing that.
🔍 Search Terms
TS1479 is "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic import call instead."
But
require(ESM)is now supported -- under--experimental-require-modulein node 20.x and 22.x and by default in node 23.x -- providing that the module graph contains no top-level await. So TypeScript needs a way to disable TS1479 when a user can assert that this is the case.✅ Viability Checklist
⭐ Suggestion
"module": "nodenext"should disable TS1479.📃 Motivating Example
Prototype blog post announcement:
💻 Use Cases
Interoperability between ESM and CJS.
TypeScript does not allow CJS to require(ESM), even when it is supported by node.
Have to avoid doing that.