@@ -2234,7 +2234,7 @@ namespace ts {
2234
2234
2235
2235
function getTargetOfImportClause(node: ImportClause, dontResolveAlias: boolean): Symbol | undefined {
2236
2236
const moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier);
2237
- markSymbolOfAliasDeclarationIfTypeOnly(node);
2237
+ const isTypeOnly = markSymbolOfAliasDeclarationIfTypeOnly(node);
2238
2238
2239
2239
if (moduleSymbol) {
2240
2240
let exportDefaultSymbol: Symbol | undefined;
@@ -2277,16 +2277,21 @@ namespace ts {
2277
2277
}
2278
2278
else if (hasSyntheticDefault) {
2279
2279
// 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;
2281
2283
}
2284
+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, exportDefaultSymbol);
2282
2285
return exportDefaultSymbol;
2283
2286
}
2284
2287
}
2285
2288
2286
2289
function getTargetOfNamespaceImport(node: NamespaceImport, dontResolveAlias: boolean): Symbol | undefined {
2287
2290
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;
2290
2295
}
2291
2296
2292
2297
function getTargetOfNamespaceExport(node: NamespaceExport, dontResolveAlias: boolean): Symbol | undefined {
@@ -2433,19 +2438,23 @@ namespace ts {
2433
2438
}
2434
2439
2435
2440
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;
2438
2445
}
2439
2446
2440
2447
function getTargetOfNamespaceExportDeclaration(node: NamespaceExportDeclaration, dontResolveAlias: boolean): Symbol {
2441
2448
return resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias);
2442
2449
}
2443
2450
2444
2451
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 ?
2447
2454
getExternalModuleMember(node.parent.parent, node, dontResolveAlias) :
2448
2455
resolveEntityName(node.propertyName || node.name, meaning, /*ignoreErrors*/ false, dontResolveAlias);
2456
+ if (!isTypeOnly) markSymbolOfAliasDeclarationIfResolvesToTypeOnly(node, resolved);
2457
+ return resolved;
2449
2458
}
2450
2459
2451
2460
function getTargetOfExportAssignment(node: ExportAssignment | BinaryExpression, dontResolveAlias: boolean): Symbol | undefined {
@@ -2557,12 +2566,14 @@ namespace ts {
2557
2566
}
2558
2567
}
2559
2568
2560
- function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration: TypeOnlyCompatibleAliasDeclaration) {
2569
+ function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration: TypeOnlyCompatibleAliasDeclaration): boolean {
2561
2570
if (isTypeOnlyImportOrExportDeclaration(aliasDeclaration)) {
2562
2571
const symbol = getSymbolOfNode(aliasDeclaration);
2563
2572
const links = getSymbolLinks(symbol);
2564
2573
links.typeOnlyDeclaration = aliasDeclaration;
2574
+ return true;
2565
2575
}
2576
+ return false;
2566
2577
}
2567
2578
2568
2579
/** Indicates that a symbol directly or indirectly resolves to a type-only import or export. */
0 commit comments