diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 3c98513423af2..4fa146584943b 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -19505,6 +19505,10 @@ namespace ts {
if (typeReferenceDirective) {
(typeReferenceDirectives || (typeReferenceDirectives = [])).push(typeReferenceDirective);
}
+ else {
+ // found at least one entry that does not originate from type reference directive
+ return undefined;
+ }
}
}
return typeReferenceDirectives;
diff --git a/src/harness/harness.ts b/src/harness/harness.ts
index 409ab9e2fcc9a..47b76793af6af 100644
--- a/src/harness/harness.ts
+++ b/src/harness/harness.ts
@@ -1238,7 +1238,7 @@ namespace Harness {
if (options.declaration && result.errors.length === 0 && result.declFilesCode.length > 0) {
ts.forEach(inputFiles, file => addDtsFile(file, declInputFiles));
ts.forEach(otherFiles, file => addDtsFile(file, declOtherFiles));
- const output = compileFiles(declInputFiles, declOtherFiles, harnessSettings, options, currentDirectory);
+ const output = compileFiles(declInputFiles, declOtherFiles, harnessSettings, options, currentDirectory || harnessSettings["currentDirectory"]);
return { declInputFiles, declOtherFiles, declResult: output.result };
}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences1.js b/tests/baselines/reference/declarationFilesWithTypeReferences1.js
new file mode 100644
index 0000000000000..b4695f28f134f
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences1.js
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/declarationFilesWithTypeReferences1.ts] ////
+
+//// [index.d.ts]
+
+interface Error {
+ stack2: string;
+}
+
+//// [app.ts]
+
+function foo(): Error {
+ return undefined;
+}
+
+//// [app.js]
+function foo() {
+ return undefined;
+}
+
+
+//// [app.d.ts]
+declare function foo(): Error;
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences1.symbols b/tests/baselines/reference/declarationFilesWithTypeReferences1.symbols
new file mode 100644
index 0000000000000..3d3df3c162280
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences1.symbols
@@ -0,0 +1,18 @@
+=== /node_modules/@types/node/index.d.ts ===
+
+interface Error {
+>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(index.d.ts, 0, 0))
+
+ stack2: string;
+>stack2 : Symbol(Error.stack2, Decl(index.d.ts, 1, 17))
+}
+
+=== /app.ts ===
+
+function foo(): Error {
+>foo : Symbol(foo, Decl(app.ts, 0, 0))
+>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(index.d.ts, 0, 0))
+
+ return undefined;
+>undefined : Symbol(undefined)
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences1.types b/tests/baselines/reference/declarationFilesWithTypeReferences1.types
new file mode 100644
index 0000000000000..7837b7b3a6c0e
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences1.types
@@ -0,0 +1,18 @@
+=== /node_modules/@types/node/index.d.ts ===
+
+interface Error {
+>Error : Error
+
+ stack2: string;
+>stack2 : string
+}
+
+=== /app.ts ===
+
+function foo(): Error {
+>foo : () => Error
+>Error : Error
+
+ return undefined;
+>undefined : undefined
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences2.js b/tests/baselines/reference/declarationFilesWithTypeReferences2.js
new file mode 100644
index 0000000000000..b85dcc4510757
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences2.js
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/declarationFilesWithTypeReferences2.ts] ////
+
+//// [index.d.ts]
+
+interface Error2 {
+ stack2: string;
+}
+
+//// [app.ts]
+
+function foo(): Error2 {
+ return undefined;
+}
+
+//// [app.js]
+function foo() {
+ return undefined;
+}
+
+
+//// [app.d.ts]
+///
+declare function foo(): Error2;
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences2.symbols b/tests/baselines/reference/declarationFilesWithTypeReferences2.symbols
new file mode 100644
index 0000000000000..dc6d8a3a6de2b
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences2.symbols
@@ -0,0 +1,18 @@
+=== /node_modules/@types/node/index.d.ts ===
+
+interface Error2 {
+>Error2 : Symbol(Error2, Decl(index.d.ts, 0, 0))
+
+ stack2: string;
+>stack2 : Symbol(Error2.stack2, Decl(index.d.ts, 1, 18))
+}
+
+=== /app.ts ===
+
+function foo(): Error2 {
+>foo : Symbol(foo, Decl(app.ts, 0, 0))
+>Error2 : Symbol(Error2, Decl(index.d.ts, 0, 0))
+
+ return undefined;
+>undefined : Symbol(undefined)
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences2.types b/tests/baselines/reference/declarationFilesWithTypeReferences2.types
new file mode 100644
index 0000000000000..c56f4ba6a67d2
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences2.types
@@ -0,0 +1,18 @@
+=== /node_modules/@types/node/index.d.ts ===
+
+interface Error2 {
+>Error2 : Error2
+
+ stack2: string;
+>stack2 : string
+}
+
+=== /app.ts ===
+
+function foo(): Error2 {
+>foo : () => Error2
+>Error2 : Error2
+
+ return undefined;
+>undefined : undefined
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences3.js b/tests/baselines/reference/declarationFilesWithTypeReferences3.js
new file mode 100644
index 0000000000000..3a18859c61090
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences3.js
@@ -0,0 +1,24 @@
+//// [tests/cases/compiler/declarationFilesWithTypeReferences3.ts] ////
+
+//// [index.d.ts]
+
+interface Error2 {
+ stack2: string;
+}
+
+//// [app.ts]
+///
+function foo(): Error2 {
+ return undefined;
+}
+
+//// [app.js]
+///
+function foo() {
+ return undefined;
+}
+
+
+//// [app.d.ts]
+///
+declare function foo(): Error2;
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences3.symbols b/tests/baselines/reference/declarationFilesWithTypeReferences3.symbols
new file mode 100644
index 0000000000000..78335f988e9b7
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences3.symbols
@@ -0,0 +1,18 @@
+=== /a/node_modules/@types/node/index.d.ts ===
+
+interface Error2 {
+>Error2 : Symbol(Error2, Decl(index.d.ts, 0, 0))
+
+ stack2: string;
+>stack2 : Symbol(Error2.stack2, Decl(index.d.ts, 1, 18))
+}
+
+=== /a/app.ts ===
+///
+function foo(): Error2 {
+>foo : Symbol(foo, Decl(app.ts, 0, 0))
+>Error2 : Symbol(Error2, Decl(index.d.ts, 0, 0))
+
+ return undefined;
+>undefined : Symbol(undefined)
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences3.types b/tests/baselines/reference/declarationFilesWithTypeReferences3.types
new file mode 100644
index 0000000000000..9ac0105890abc
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences3.types
@@ -0,0 +1,18 @@
+=== /a/node_modules/@types/node/index.d.ts ===
+
+interface Error2 {
+>Error2 : Error2
+
+ stack2: string;
+>stack2 : string
+}
+
+=== /a/app.ts ===
+///
+function foo(): Error2 {
+>foo : () => Error2
+>Error2 : Error2
+
+ return undefined;
+>undefined : undefined
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences4.js b/tests/baselines/reference/declarationFilesWithTypeReferences4.js
new file mode 100644
index 0000000000000..b45860be9bb82
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences4.js
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/declarationFilesWithTypeReferences4.ts] ////
+
+//// [index.d.ts]
+
+interface Error {
+ stack2: string;
+}
+
+//// [app.ts]
+///
+function foo(): Error {
+ return undefined;
+}
+
+//// [app.js]
+///
+function foo() {
+ return undefined;
+}
+
+
+//// [app.d.ts]
+declare function foo(): Error;
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences4.symbols b/tests/baselines/reference/declarationFilesWithTypeReferences4.symbols
new file mode 100644
index 0000000000000..216bd2a6a1c7d
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences4.symbols
@@ -0,0 +1,18 @@
+=== /a/node_modules/@types/node/index.d.ts ===
+
+interface Error {
+>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(index.d.ts, 0, 0))
+
+ stack2: string;
+>stack2 : Symbol(Error.stack2, Decl(index.d.ts, 1, 17))
+}
+
+=== /a/app.ts ===
+///
+function foo(): Error {
+>foo : Symbol(foo, Decl(app.ts, 0, 0))
+>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(index.d.ts, 0, 0))
+
+ return undefined;
+>undefined : Symbol(undefined)
+}
diff --git a/tests/baselines/reference/declarationFilesWithTypeReferences4.types b/tests/baselines/reference/declarationFilesWithTypeReferences4.types
new file mode 100644
index 0000000000000..0ae603716b100
--- /dev/null
+++ b/tests/baselines/reference/declarationFilesWithTypeReferences4.types
@@ -0,0 +1,18 @@
+=== /a/node_modules/@types/node/index.d.ts ===
+
+interface Error {
+>Error : Error
+
+ stack2: string;
+>stack2 : string
+}
+
+=== /a/app.ts ===
+///
+function foo(): Error {
+>foo : () => Error
+>Error : Error
+
+ return undefined;
+>undefined : undefined
+}
diff --git a/tests/cases/compiler/declarationFilesWithTypeReferences1.ts b/tests/cases/compiler/declarationFilesWithTypeReferences1.ts
new file mode 100644
index 0000000000000..e499543057e97
--- /dev/null
+++ b/tests/cases/compiler/declarationFilesWithTypeReferences1.ts
@@ -0,0 +1,14 @@
+// @types: node
+// @declaration: true
+// @currentDirectory: /
+
+// @filename: /node_modules/@types/node/index.d.ts
+interface Error {
+ stack2: string;
+}
+
+// @filename: /app.ts
+
+function foo(): Error {
+ return undefined;
+}
\ No newline at end of file
diff --git a/tests/cases/compiler/declarationFilesWithTypeReferences2.ts b/tests/cases/compiler/declarationFilesWithTypeReferences2.ts
new file mode 100644
index 0000000000000..0514895563774
--- /dev/null
+++ b/tests/cases/compiler/declarationFilesWithTypeReferences2.ts
@@ -0,0 +1,14 @@
+// @types: node
+// @declaration: true
+// @currentDirectory: /
+
+// @filename: /node_modules/@types/node/index.d.ts
+interface Error2 {
+ stack2: string;
+}
+
+// @filename: /app.ts
+
+function foo(): Error2 {
+ return undefined;
+}
\ No newline at end of file
diff --git a/tests/cases/compiler/declarationFilesWithTypeReferences3.ts b/tests/cases/compiler/declarationFilesWithTypeReferences3.ts
new file mode 100644
index 0000000000000..6653fb11f8b44
--- /dev/null
+++ b/tests/cases/compiler/declarationFilesWithTypeReferences3.ts
@@ -0,0 +1,12 @@
+// @declaration: true
+
+// @filename: /a/node_modules/@types/node/index.d.ts
+interface Error2 {
+ stack2: string;
+}
+
+// @filename: /a/app.ts
+///
+function foo(): Error2 {
+ return undefined;
+}
\ No newline at end of file
diff --git a/tests/cases/compiler/declarationFilesWithTypeReferences4.ts b/tests/cases/compiler/declarationFilesWithTypeReferences4.ts
new file mode 100644
index 0000000000000..4719feb56642e
--- /dev/null
+++ b/tests/cases/compiler/declarationFilesWithTypeReferences4.ts
@@ -0,0 +1,12 @@
+// @declaration: true
+
+// @filename: /a/node_modules/@types/node/index.d.ts
+interface Error {
+ stack2: string;
+}
+
+// @filename: /a/app.ts
+///
+function foo(): Error {
+ return undefined;
+}
\ No newline at end of file