diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 19a7085f7d0..dab7b68e6c9 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4164,6 +4164,14 @@ namespace ts { && isDeclarationVisible(declaration.parent)) { return addVisibleAlias(declaration, declaration); } + else if (isBindingElement(declaration) && isInJSFile(declaration) && declaration.parent?.parent // exported import-like top-level JS require statement + && isVariableDeclaration(declaration.parent.parent) + && declaration.parent.parent.parent?.parent && isVariableStatement(declaration.parent.parent.parent.parent) + && !hasSyntacticModifier(declaration.parent.parent.parent.parent, ModifierFlags.Export) + && declaration.parent.parent.parent.parent.parent // check if the thing containing the variable statement is visible (ie, the file) + && isDeclarationVisible(declaration.parent.parent.parent.parent.parent)) { + return addVisibleAlias(declaration, declaration.parent.parent.parent.parent); + } // Declaration is not visible return false; diff --git a/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.js b/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.js index e1f3f00b801..56fda8a0425 100644 --- a/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.js +++ b/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.js @@ -94,14 +94,6 @@ export const testFnTypes: { [x: string]: any; }; export namespace testFnTypes { - type input = boolean | Function | { - /** - * - Prop 1. - */ - prop1: string | RegExp | (string | RegExp)[]; - /** - * - Prop 2. - */ - prop2: string; - }; + type input = boolean | Function | myTypes.typeB; } +import { myTypes } from "./file.js"; diff --git a/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.types b/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.types index ad7d3cc0ef6..261724d0410 100644 --- a/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.types +++ b/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespaceCjs.types @@ -27,12 +27,12 @@ const testFnTypes = { */ function testFn(input) { >testFn : (input: testFnTypes.input) => number | null ->input : boolean | Function | { prop1: string | RegExp | (string | RegExp)[]; prop2: string; } +>input : boolean | Function | myTypes.typeB if (typeof input === 'number') { >typeof input === 'number' : boolean >typeof input : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" ->input : boolean | Function | { prop1: string | RegExp | (string | RegExp)[]; prop2: string; } +>input : boolean | Function | myTypes.typeB >'number' : "number" return 2 * input;