diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index c4090683338..bd9d4c4bc1c 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -562,7 +562,8 @@ namespace ts {
const declarationFile = getSourceFileOfNode(declaration);
const useFile = getSourceFileOfNode(usage);
if (declarationFile !== useFile) {
- if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) {
+ if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) ||
+ (!compilerOptions.outFile && !compilerOptions.out)) {
// nodes are in different files and order cannot be determines
return true;
}
diff --git a/src/services/services.ts b/src/services/services.ts
index c20f95a56f2..68fd95f1441 100644
--- a/src/services/services.ts
+++ b/src/services/services.ts
@@ -1,4 +1,5 @@
///
+///
///
///
diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt
new file mode 100644
index 00000000000..a4d28f51878
--- /dev/null
+++ b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt
@@ -0,0 +1,11 @@
+tests/cases/compiler/file1.ts(2,1): error TS2448: Block-scoped variable 'c' used before its declaration.
+
+
+==== tests/cases/compiler/file1.ts (1 errors) ====
+
+ c;
+ ~
+!!! error TS2448: Block-scoped variable 'c' used before its declaration.
+
+==== tests/cases/compiler/file2.ts (0 errors) ====
+ const c = 0;
\ No newline at end of file
diff --git a/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt b/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt
index 21390cc2955..b88c73e0439 100644
--- a/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt
+++ b/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt
@@ -1,10 +1,13 @@
error TS5053: Option 'allowJs' cannot be specified with option 'declaration'.
+tests/cases/compiler/a.ts(2,1): error TS2448: Block-scoped variable 'a' used before its declaration.
!!! error TS5053: Option 'allowJs' cannot be specified with option 'declaration'.
-==== tests/cases/compiler/a.ts (0 errors) ====
+==== tests/cases/compiler/a.ts (1 errors) ====
let b = 30;
a = 10;
+ ~
+!!! error TS2448: Block-scoped variable 'a' used before its declaration.
==== tests/cases/compiler/b.js (0 errors) ====
let a = 10;
b = 30;
diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt
new file mode 100644
index 00000000000..5b8633312d9
--- /dev/null
+++ b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt
@@ -0,0 +1,11 @@
+tests/cases/compiler/file1.ts(2,1): error TS2448: Block-scoped variable 'l' used before its declaration.
+
+
+==== tests/cases/compiler/file1.ts (1 errors) ====
+
+ l;
+ ~
+!!! error TS2448: Block-scoped variable 'l' used before its declaration.
+
+==== tests/cases/compiler/file2.ts (0 errors) ====
+ const l = 0;
\ No newline at end of file