diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 5ce9ca431b15f..3fa7da5d5c960 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -3118,7 +3118,7 @@ function loadModuleFromSpecificNodeModulesDirectory(extensions: Extensions, modu packageInfo, ); if ( - !pathAndExtension && packageInfo + !pathAndExtension && !rest && packageInfo // eslint-disable-next-line no-restricted-syntax && (packageInfo.contents.packageJsonContent.exports === undefined || packageInfo.contents.packageJsonContent.exports === null) && state.features & NodeResolutionFeatures.EsmMode diff --git a/tests/baselines/reference/nodeModulesNoDirectoryModule.errors.txt b/tests/baselines/reference/nodeModulesNoDirectoryModule.errors.txt new file mode 100644 index 0000000000000..b6f165f8b9014 --- /dev/null +++ b/tests/baselines/reference/nodeModulesNoDirectoryModule.errors.txt @@ -0,0 +1,26 @@ +/index.ts(2,8): error TS2307: Cannot find module 'i-have-a-dir-and-main/dist/dir' or its corresponding type declarations. + + +==== /node_modules/i-have-a-dir-and-main/package.json (0 errors) ==== + { + "name": "i-have-a-dir-and-main", + "version": "1.0.0", + "type": "module", + "main": "dist/index.js" + } + +==== /node_modules/i-have-a-dir-and-main/dist/index.d.ts (0 errors) ==== + export declare const a = 1; + +==== /node_modules/i-have-a-dir-and-main/dist/dir/index.d.ts (0 errors) ==== + export declare const b = 2; + +==== /package.json (0 errors) ==== + { "type": "module" } + +==== /index.ts (1 errors) ==== + import 'i-have-a-dir-and-main' // ok + import 'i-have-a-dir-and-main/dist/dir' // error + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'i-have-a-dir-and-main/dist/dir' or its corresponding type declarations. + \ No newline at end of file diff --git a/tests/cases/conformance/node/nodeModulesNoDirectoryModule.ts b/tests/cases/conformance/node/nodeModulesNoDirectoryModule.ts new file mode 100644 index 0000000000000..5b5d38a99466c --- /dev/null +++ b/tests/cases/conformance/node/nodeModulesNoDirectoryModule.ts @@ -0,0 +1,26 @@ +// @noUncheckedSideEffectImports: true +// @strict: true +// @module: node16 +// @noEmit: true +// @noTypesAndSymbols: true + +// @Filename: /node_modules/i-have-a-dir-and-main/package.json +{ + "name": "i-have-a-dir-and-main", + "version": "1.0.0", + "type": "module", + "main": "dist/index.js" +} + +// @Filename: /node_modules/i-have-a-dir-and-main/dist/index.d.ts +export declare const a = 1; + +// @Filename: /node_modules/i-have-a-dir-and-main/dist/dir/index.d.ts +export declare const b = 2; + +// @Filename: /package.json +{ "type": "module" } + +// @Filename: /index.ts +import 'i-have-a-dir-and-main' // ok +import 'i-have-a-dir-and-main/dist/dir' // error