diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 725cdf4e8e4..e233ab26093 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -47760,11 +47760,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
function addReferencedFilesToTypeDirective(file: SourceFile, key: string, mode: ResolutionMode) {
if (fileToDirective.has(file.path)) return;
fileToDirective.set(file.path, [key, mode]);
- for (const { fileName, resolutionMode } of file.referencedFiles) {
+ for (const { fileName } of file.referencedFiles) {
const resolvedFile = resolveTripleslashReference(fileName, file.fileName);
const referencedFile = host.getSourceFile(resolvedFile);
if (referencedFile) {
- addReferencedFilesToTypeDirective(referencedFile, key, resolutionMode || file.impliedNodeFormat);
+ // The resolution mode of the file reference doesn't actually matter here -
+ // all we're recording is the fact that the file entered the compilation
+ // transitively via a type reference directive of {key} with mode {mode}.
+ addReferencedFilesToTypeDirective(referencedFile, key, mode || file.impliedNodeFormat);
}
}
}
diff --git a/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.js b/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.js
new file mode 100644
index 00000000000..5ff9411dc18
--- /dev/null
+++ b/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.js
@@ -0,0 +1,28 @@
+//// [tests/cases/compiler/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.ts] ////
+
+//// [package.json]
+{
+ "name": "@types/node",
+ "version": "1.0.0",
+ "types": "index.d.ts"
+}
+
+//// [globals.d.ts]
+declare namespace NodeJS {
+ interface ReadableStream {}
+}
+
+//// [index.d.ts]
+///
+
+//// [app.mts]
+///
+export async function drainStream(stream: NodeJS.ReadableStream): Promise {
+}
+
+
+
+
+//// [app.d.mts]
+///
+export declare function drainStream(stream: NodeJS.ReadableStream): Promise;
diff --git a/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.symbols b/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.symbols
new file mode 100644
index 00000000000..2075b1f6fbf
--- /dev/null
+++ b/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.symbols
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.ts] ////
+
+=== /app.mts ===
+///
+export async function drainStream(stream: NodeJS.ReadableStream): Promise {
+>drainStream : Symbol(drainStream, Decl(app.mts, 0, 0))
+>stream : Symbol(stream, Decl(app.mts, 1, 34))
+>NodeJS : Symbol(NodeJS, Decl(globals.d.ts, 0, 0))
+>ReadableStream : Symbol(NodeJS.ReadableStream, Decl(globals.d.ts, 0, 26))
+>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
+}
+
+=== /node_modules/@types/node/globals.d.ts ===
+declare namespace NodeJS {
+>NodeJS : Symbol(NodeJS, Decl(globals.d.ts, 0, 0))
+
+ interface ReadableStream {}
+>ReadableStream : Symbol(ReadableStream, Decl(globals.d.ts, 0, 26))
+}
+
+=== /node_modules/@types/node/index.d.ts ===
+
+///
+
diff --git a/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.types b/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.types
new file mode 100644
index 00000000000..5c309eebd0c
--- /dev/null
+++ b/tests/baselines/reference/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.types
@@ -0,0 +1,20 @@
+//// [tests/cases/compiler/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.ts] ////
+
+=== /app.mts ===
+///
+export async function drainStream(stream: NodeJS.ReadableStream): Promise {
+>drainStream : (stream: NodeJS.ReadableStream) => Promise
+>stream : NodeJS.ReadableStream
+>NodeJS : any
+}
+
+=== /node_modules/@types/node/globals.d.ts ===
+
+declare namespace NodeJS {
+ interface ReadableStream {}
+}
+
+=== /node_modules/@types/node/index.d.ts ===
+
+///
+
diff --git a/tests/cases/compiler/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.ts b/tests/cases/compiler/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.ts
new file mode 100644
index 00000000000..b090d95e9da
--- /dev/null
+++ b/tests/cases/compiler/dtsEmitTripleSlashAvoidUnnecessaryResolutionMode.ts
@@ -0,0 +1,29 @@
+// @Filename: /tsconfig.json
+{
+ "compilerOptions": {
+ "module": "nodenext",
+ "types": [],
+ "declaration": true,
+ "emitDeclarationOnly": true,
+ }
+}
+
+// @Filename: /node_modules/@types/node/package.json
+{
+ "name": "@types/node",
+ "version": "1.0.0",
+ "types": "index.d.ts"
+}
+
+// @Filename: /node_modules/@types/node/globals.d.ts
+declare namespace NodeJS {
+ interface ReadableStream {}
+}
+
+// @Filename: /node_modules/@types/node/index.d.ts
+///
+
+// @Filename: /app.mts
+///
+export async function drainStream(stream: NodeJS.ReadableStream): Promise {
+}