TypeScript: Setting noImplicityAny to true triggers transitive import type declaration errors with moduleResolution NodeNext
Bug Report
Setting noImplicityAny to true triggers transitive import errors like this, when using "moduleResolution": "nodenext":
node_modules/@tiptap/core/dist/packages/core/src/helpers/isTextSelection.d.ts:1:31 - error TS7016: Could not find a declaration file for module 'prosemirror-state'. '/Users/basher/code/prosemirror-nodenext/node_modules/prosemirror-state/dist/index.cjs' implicitly has an 'any' type.
Try `npm i --save-dev @types/prosemirror-state` if it exists or add a new declaration (.d.ts) file containing `declare module 'prosemirror-state';`
1 import { TextSelection } from 'prosemirror-state';
~~~~~~~~~~~~~~~~~~~
In this setup, we’re importing @tiptap/core, which is importing prosemirror-* packages. @tiptap/core is a CommonJS package. prosemirror-* packages have exports maps and appear to support CommonJS and ESM correctly. I should also note that prosesmirror-* packages come with their own types (i.e. no @types/* packages needed)
Setting noImplicitAny to true triggers these errors. Setting it to false makes them disappear (successful compile).
🔎 Search Terms
- nodenext
- esm
- import
🕗 Version & Regression Information
With the TS 4.7 release, we’re trying to migrate to NodeNext as a step to getting to ESM. It wasn’t possible to use NodeNext on prior versions.
⏯ Playground Link
I can’t figure out how to add node_modules to TS Playground, but I’d be happy to provide a playground link, if someone can advise there.
https://github.com/benasher44/prosemirror-nodenext
💻 Code
tsconfig.json
{
"compilerOptions": {
"target": "ES6",
"module": "ESNext",
"esModuleInterop": true,
"lib": [
"DOM",
"DOM.Iterable",
"ES2021"
],
"moduleResolution": "NodeNext",
"outDir": "build",
"allowSyntheticDefaultImports": true,
"strict": true,
"sourceMap": true,
"declaration": true,
"noImplicitAny": true,
},
"include": ["src/**/*", "__tests__/**/*"]
}
Add latest @tiptap/core to package.json (2.0.0-beta.182 in this case)
TS file that imports and consumes a type from @tiptap/core
import { JSONContent } from "@tiptap/core";
export function test(e: JSONContent): void {
console.log(e);
}
🙁 Actual behavior
Errors that show TS can’t find type declaration.
🙂 Expected behavior
Successful compile.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 13
- Comments: 15 (7 by maintainers)
You can also use
--traceResolution(to see the steps taken during module resolution) and--explainFiles(to know more information about files like was it treated as CJS or ESM based on package.json, why was file in the program etc)