@@ -2234,7 +2234,7 @@ namespace ts {
22342234
22352235 function getTargetOfImportClause(node: ImportClause, dontResolveAlias: boolean): Symbol | undefined {
22362236 const moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier);
2237- markSymbolOfAliasDeclarationIfTypeOnly(node);
2237+ const isTypeOnly = markSymbolOfAliasDeclarationIfTypeOnly(node);
22382238
22392239 if (moduleSymbol) {
22402240 let exportDefaultSymbol: Symbol | undefined;
@@ -2277,16 +2277,21 @@ namespace ts {
22772277 }
22782278 else if (hasSyntheticDefault) {
22792279 // per emit behavior, a synthetic default overrides a "real" .default member if `__esModule` is not present
2280- return resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
2280+ const resolved = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
2281+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2282+ return resolved;
22812283 }
2284+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, exportDefaultSymbol);
22822285 return exportDefaultSymbol;
22832286 }
22842287 }
22852288
22862289 function getTargetOfNamespaceImport(node: NamespaceImport, dontResolveAlias: boolean): Symbol | undefined {
22872290 const moduleSpecifier = node.parent.parent.moduleSpecifier;
2288- markSymbolOfAliasDeclarationIfTypeOnly(node);
2289- return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier, dontResolveAlias, /*suppressUsageError*/ false);
2291+ const isTypeOnly = markSymbolOfAliasDeclarationIfTypeOnly(node);
2292+ const resolved = resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier, dontResolveAlias, /*suppressUsageError*/ false);
2293+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2294+ return resolved;
22902295 }
22912296
22922297 function getTargetOfNamespaceExport(node: NamespaceExport, dontResolveAlias: boolean): Symbol | undefined {
@@ -2433,19 +2438,23 @@ namespace ts {
24332438 }
24342439
24352440 function getTargetOfImportSpecifier(node: ImportSpecifier, dontResolveAlias: boolean): Symbol | undefined {
2436- markSymbolOfAliasDeclarationIfTypeOnly(node);
2437- return getExternalModuleMember(node.parent.parent.parent, node, dontResolveAlias);
2441+ const isTypeOnly = markSymbolOfAliasDeclarationIfTypeOnly(node);
2442+ const resolved = getExternalModuleMember(node.parent.parent.parent, node, dontResolveAlias);
2443+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2444+ return resolved;
24382445 }
24392446
24402447 function getTargetOfNamespaceExportDeclaration(node: NamespaceExportDeclaration, dontResolveAlias: boolean): Symbol {
24412448 return resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias);
24422449 }
24432450
24442451 function getTargetOfExportSpecifier(node: ExportSpecifier, meaning: SymbolFlags, dontResolveAlias?: boolean) {
2445- markSymbolOfAliasDeclarationIfTypeOnly(node);
2446- return node.parent.parent.moduleSpecifier ?
2452+ const isTypeOnly = markSymbolOfAliasDeclarationIfTypeOnly(node);
2453+ const resolved = node.parent.parent.moduleSpecifier ?
24472454 getExternalModuleMember(node.parent.parent, node, dontResolveAlias) :
24482455 resolveEntityName(node.propertyName || node.name, meaning, /*ignoreErrors*/ false, dontResolveAlias);
2456+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2457+ return resolved;
24492458 }
24502459
24512460 function getTargetOfExportAssignment(node: ExportAssignment | BinaryExpression, dontResolveAlias: boolean): Symbol | undefined {
@@ -2557,12 +2566,14 @@ namespace ts {
25572566 }
25582567 }
25592568
2560- function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration: TypeOnlyCompatibleAliasDeclaration) {
2569+ function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration: TypeOnlyCompatibleAliasDeclaration): boolean {
25612570 if (isTypeOnlyImportOrExportDeclaration(aliasDeclaration)) {
25622571 const symbol = getSymbolOfNode(aliasDeclaration);
25632572 const links = getSymbolLinks(symbol);
25642573 links.typeOnlyDeclaration = aliasDeclaration;
2574+ return true;
25652575 }
2576+ return false;
25662577 }
25672578
25682579 /** Indicates that a symbol directly or indirectly resolves to a type-only import or export. */
0 commit comments