@@ -3312,8 +3312,8 @@ namespace ts {
33123312 return [symbol!];
33133313 }
33143314
3315- // Check if symbol is any of the alias
3316- return forEachEntry(symbols, symbolFromSymbolTable => {
3315+ // Check if symbol is any of the aliases in scope
3316+ const result = forEachEntry(symbols, symbolFromSymbolTable => {
33173317 if (symbolFromSymbolTable.flags & SymbolFlags.Alias
33183318 && symbolFromSymbolTable.escapedName !== InternalSymbolName.ExportEquals
33193319 && symbolFromSymbolTable.escapedName !== InternalSymbolName.Default
@@ -3326,16 +3326,9 @@ namespace ts {
33263326 ) {
33273327
33283328 const resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
3329- if (isAccessible(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification)) {
3330- return [symbolFromSymbolTable];
3331- }
3332-
3333- // Look in the exported members, if we can find accessibleSymbolChain, symbol is accessible using this chain
3334- // but only if the symbolFromSymbolTable can be qualified
3335- const candidateTable = getExportsOfSymbol(resolvedImportedSymbol);
3336- const accessibleSymbolsFromExports = candidateTable && getAccessibleSymbolChainFromSymbolTable(candidateTable, /*ignoreQualification*/ true);
3337- if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
3338- return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
3329+ const candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
3330+ if (candidate) {
3331+ return candidate;
33393332 }
33403333 }
33413334 if (symbolFromSymbolTable.escapedName === symbol!.escapedName && symbolFromSymbolTable.exportSymbol) {
@@ -3344,6 +3337,23 @@ namespace ts {
33443337 }
33453338 }
33463339 });
3340+
3341+ // If there's no result and we're looking at the global symbol table, treat `globalThis` like an alias and try to lookup thru that
3342+ return result || (symbols === globals ? getCandidateListForSymbol(globalThisSymbol, globalThisSymbol, ignoreQualification) : undefined);
3343+ }
3344+
3345+ function getCandidateListForSymbol(symbolFromSymbolTable: Symbol, resolvedImportedSymbol: Symbol, ignoreQualification: boolean | undefined) {
3346+ if (isAccessible(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification)) {
3347+ return [symbolFromSymbolTable];
3348+ }
3349+
3350+ // Look in the exported members, if we can find accessibleSymbolChain, symbol is accessible using this chain
3351+ // but only if the symbolFromSymbolTable can be qualified
3352+ const candidateTable = getExportsOfSymbol(resolvedImportedSymbol);
3353+ const accessibleSymbolsFromExports = candidateTable && getAccessibleSymbolChainFromSymbolTable(candidateTable, /*ignoreQualification*/ true);
3354+ if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
3355+ return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
3356+ }
33473357 }
33483358 }
33493359
0 commit comments