@@ -1473,8 +1473,15 @@ namespace ts {
14731473 }
14741474 }
14751475
1476+ /**
1477+ * Indicates that a symbol is an alias that does not merge with a local declaration.
1478+ */
1479+ function isNonLocalAlias(symbol: Symbol, excludes = SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace) {
1480+ return symbol && (symbol.flags & (SymbolFlags.Alias | excludes)) === SymbolFlags.Alias;
1481+ }
1482+
14761483 function resolveSymbol(symbol: Symbol, dontResolveAlias?: boolean): Symbol {
1477- const shouldResolve = !dontResolveAlias && symbol && symbol.flags & SymbolFlags.Alias && ! (symbol.flags & (SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace) );
1484+ const shouldResolve = !dontResolveAlias && isNonLocalAlias (symbol);
14781485 return shouldResolve ? resolveAlias(symbol) : symbol;
14791486 }
14801487
@@ -12015,7 +12022,9 @@ namespace ts {
1201512022 return getTypeOfSymbol(symbol);
1201612023 }
1201712024
12018- if (symbol.flags & SymbolFlags.Alias && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) {
12025+ // We should only mark aliases as referenced if there isn't a local value declaration
12026+ // for the symbol.
12027+ if (isNonLocalAlias(symbol, /*excludes*/ SymbolFlags.Value) && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) {
1201912028 markAliasSymbolAsReferenced(symbol);
1202012029 }
1202112030
@@ -22864,7 +22873,9 @@ namespace ts {
2286422873 node = getParseTreeNode(node, isIdentifier);
2286522874 if (node) {
2286622875 const symbol = getReferencedValueSymbol(node);
22867- if (symbol && symbol.flags & SymbolFlags.Alias) {
22876+ // We should only get the declaration of an alias if there isn't a local value
22877+ // declaration for the symbol
22878+ if (isNonLocalAlias(symbol, /*excludes*/ SymbolFlags.Value)) {
2286822879 return getDeclarationOfAliasSymbol(symbol);
2286922880 }
2287022881 }
0 commit comments