@@ -2182,7 +2182,12 @@ namespace ts {
21822182
21832183 function getTargetOfImportEqualsDeclaration(node: ImportEqualsDeclaration, dontResolveAlias: boolean): Symbol | undefined {
21842184 if (node.moduleReference.kind === SyntaxKind.ExternalModuleReference) {
2185- return resolveExternalModuleSymbol(resolveExternalModuleName(node, getExternalModuleImportEqualsDeclarationExpression(node)));
2185+ const immediate = resolveExternalModuleName(node, getExternalModuleImportEqualsDeclarationExpression(node));
2186+ const resolved = resolveExternalModuleSymbol(immediate);
2187+ if (!markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, immediate)) {
2188+ markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2189+ }
2190+ return resolved;
21862191 }
21872192 return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, dontResolveAlias);
21882193 }
@@ -2278,7 +2283,9 @@ namespace ts {
22782283 else if (hasSyntheticDefault) {
22792284 // per emit behavior, a synthetic default overrides a "real" .default member if `__esModule` is not present
22802285 const resolved = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
2281- if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2286+ if (!isTypeOnly && !markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, moduleSymbol)) {
2287+ markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2288+ }
22822289 return resolved;
22832290 }
22842291 if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, exportDefaultSymbol);
@@ -2289,8 +2296,11 @@ namespace ts {
22892296 function getTargetOfNamespaceImport(node: NamespaceImport, dontResolveAlias: boolean): Symbol | undefined {
22902297 const moduleSpecifier = node.parent.parent.moduleSpecifier;
22912298 const isTypeOnly = markSymbolOfAliasDeclarationIfTypeOnly(node);
2292- const resolved = resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier, dontResolveAlias, /*suppressUsageError*/ false);
2293- if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2299+ const immediate = resolveExternalModuleName(node, moduleSpecifier);
2300+ const resolved = resolveESModuleSymbol(immediate, moduleSpecifier, dontResolveAlias, /*suppressUsageError*/ false);
2301+ if (!isTypeOnly && !markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, immediate)) {
2302+ markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2303+ }
22942304 return resolved;
22952305 }
22962306
@@ -2459,7 +2469,9 @@ namespace ts {
24592469
24602470 function getTargetOfExportAssignment(node: ExportAssignment | BinaryExpression, dontResolveAlias: boolean): Symbol | undefined {
24612471 const expression = (isExportAssignment(node) ? node.expression : node.right) as EntityNameExpression | ClassExpression;
2462- return getTargetOfAliasLikeExpression(expression, dontResolveAlias);
2472+ const resolved = getTargetOfAliasLikeExpression(expression, dontResolveAlias);
2473+ markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2474+ return resolved;
24632475 }
24642476
24652477 function getTargetOfAliasLikeExpression(expression: Expression, dontResolveAlias: boolean) {
@@ -2556,14 +2568,18 @@ namespace ts {
25562568 return links.target;
25572569 }
25582570
2559- function markSymbolOfAliasDeclarationIfResolvesToTypeOnly(aliasDeclaration: TypeOnlyCompatibleAliasDeclaration | undefined, resolvesToSymbol: Symbol | undefined) {
2560- if (!aliasDeclaration || !resolvesToSymbol) return;
2571+ function markSymbolOfAliasDeclarationIfResolvesToTypeOnly(aliasDeclaration: Declaration | undefined, resolvesToSymbol: Symbol | undefined): boolean {
2572+ if (!aliasDeclaration || !resolvesToSymbol) return false ;
25612573 const sourceSymbol = getSymbolOfNode(aliasDeclaration);
25622574 const links = getSymbolLinks(sourceSymbol);
25632575 if (links.typeOnlyDeclaration === undefined) {
2576+ resolvesToSymbol = resolvesToSymbol.exports?.get(InternalSymbolName.ExportEquals) ?? resolvesToSymbol;
25642577 const typeOnly = find(resolvesToSymbol.declarations, isTypeOnlyImportOrExportDeclaration);
2565- links.typeOnlyDeclaration = typeOnly ?? getSymbolLinks(resolvesToSymbol).typeOnlyDeclaration ?? false;
2578+ const decl = typeOnly ?? getSymbolLinks(resolvesToSymbol).typeOnlyDeclaration ?? false;
2579+ links.typeOnlyDeclaration = decl;
2580+ return !!decl;
25662581 }
2582+ return false;
25672583 }
25682584
25692585 function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration: TypeOnlyCompatibleAliasDeclaration): boolean {
@@ -2711,8 +2727,8 @@ namespace ts {
27112727 throw Debug.assertNever(name, "Unknown entity name kind.");
27122728 }
27132729 Debug.assert((getCheckFlags(symbol) & CheckFlags.Instantiated) === 0, "Should never get an instantiated symbol here.");
2714- if (isIdentifier(name) && symbol.flags & SymbolFlags.Alias) {
2715- markSymbolOfAliasDeclarationIfResolvesToTypeOnly(getTypeOnlyCompatibleAliasDeclarationFromName (name), symbol);
2730+ if (isIdentifier(name) && ( symbol.flags & SymbolFlags.Alias || name.parent.kind === SyntaxKind.ExportAssignment) ) {
2731+ markSymbolOfAliasDeclarationIfResolvesToTypeOnly(getAliasDeclarationFromName (name), symbol);
27162732 }
27172733 return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
27182734 }
0 commit comments