diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts
index a9e2f202726..beecafe0e81 100644
--- a/src/services/importTracker.ts
+++ b/src/services/importTracker.ts
@@ -109,7 +109,9 @@ namespace ts.FindAllReferences {
}
else if (isDefaultImport(direct)) {
const sourceFileLike = getSourceFileLikeForImportDeclaration(direct);
- addIndirectUser(sourceFileLike); // Add a check for indirect uses to handle synthetic default imports
+ if (!isAvailableThroughGlobal) {
+ addIndirectUser(sourceFileLike); // Add a check for indirect uses to handle synthetic default imports
+ }
directImports.push(direct);
}
else {
@@ -651,8 +653,8 @@ namespace ts.FindAllReferences {
if (parent.kind === SyntaxKind.SourceFile) {
return parent as SourceFile;
}
- Debug.assert(parent.kind === SyntaxKind.ModuleBlock && isAmbientModuleDeclaration(parent.parent));
- return parent.parent as AmbientModuleDeclaration;
+ Debug.assert(parent.kind === SyntaxKind.ModuleBlock);
+ return cast(parent.parent, isAmbientModuleDeclaration);
}
function isAmbientModuleDeclaration(node: Node): node is AmbientModuleDeclaration {
diff --git a/tests/cases/fourslash/esModuleInteropFindAllReferences.ts b/tests/cases/fourslash/esModuleInteropFindAllReferences.ts
index 9ead793a867..5ec348bb120 100644
--- a/tests/cases/fourslash/esModuleInteropFindAllReferences.ts
+++ b/tests/cases/fourslash/esModuleInteropFindAllReferences.ts
@@ -1,3 +1,5 @@
+///
+
// @esModuleInterop: true
// @Filename: /abc.d.ts
@@ -6,7 +8,7 @@
////}
// @Filename: /b.ts
-////import * as a from "a";
+////import a from "a";
////a.[|x|];
verify.rangesReferenceEachOther();
\ No newline at end of file
diff --git a/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts b/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts
new file mode 100644
index 00000000000..55fc6cc89e4
--- /dev/null
+++ b/tests/cases/fourslash/esModuleInteropFindAllReferences2.ts
@@ -0,0 +1,15 @@
+///
+
+// Tests that we don't always add an indirect user, which causes problems if the module is already available globally.
+
+// @esModuleInterop: true
+
+// @Filename: /a.d.ts
+////export as namespace abc;
+////export const [|x|]: number;
+
+// @Filename: /b.ts
+////import a from "./a";
+////a.[|x|];
+
+verify.rangesReferenceEachOther();