Open shadowspawn opened 3 months ago
I checked the TypeScript moduleResolution
in my project. Ah ha, my tsconfig has node16
and the arethetypeswrong
warning is for node16
+CommonJS
, that lines up.
"compilerOptions": {
"module": "node16",
Hmm, this is potentially tricky. TypeScript is not the tool for generating multiple versions of definition files. They recommend you generate one of ESM/CJS from your TypeScript and then use a tool to transpile the files for the other, like Babel (as used here). But that process includes generating both the JavaScript files and the type definition files. And Babel only generates the JavaScript and not the definition file. More investigation required...
Expected behavior
Able to use TypeScript for type checking in a CommonJS file which imports
eslint-plugin-jdocs
(usingrequire
).Actual behavior
TypeScript fails on the require line for
eslint-plugin-jdocs
in a CommonJS file.My understanding of the problem is that TypeScript best practice is a definition file corresponds to a single JavaScript file. I am guessing when TypeScript finds the
types
file for eslint-plugin-jdocs of./dist/index.d.ts
, it assumes the corresponding JavaScript file will be the esm flavour since eslint-plugin-jdocs has"type": "module"
and the.d.ts
is therefore implicitly esm.There is a project which champions technically correct TypeScript setups and picks up a potential problem. This might be more convincing than my scenario. 😄
Quoting from FalseESM:
I was able to fix my error without actually creating a separate definition file by modifying eslint-plugin-jdocs
package.json
file like this, but I suspect it is not robust so more for interest than a suggestion!I assume the robust solution would be to have an explicit definition file for cjs (say):
index.d.cts
.TypeScript is normally fairly forgiving about this problem to avoid breaking consumers (https://github.com/microsoft/TypeScript/issues/50762#issuecomment-1528318260) and I seem to have stumbled on a case where it notices.
Happy to work on a simple reproduction if you would like to see TypeScript failure yourself rather than just the
arethetypeswrong
warning, and willing to work on a PR.Environment
eslint-plugin-jsdoc
version: 48.2.3