@@ -11616,9 +11616,15 @@ namespace ts {
1161611616 }
1161711617 isRequireAlias = isCallExpression(expr) && isRequireCall(expr, /*requireStringLiteralLikeArgument*/ true) && !!valueType.symbol;
1161811618 }
11619- const isImportTypeWithQualifier = node.kind === SyntaxKind.ImportType && (node as ImportTypeNode).qualifier;
11619+
11620+ // We need to do an extra hop to find the correct type when type being referred is a class, because
11621+ // a class and its type are interwoven in the type
11622+ const isImportOfClassTypeWithQualifier = node.kind === SyntaxKind.ImportType
11623+ && (node as ImportTypeNode).qualifier
11624+ && valueType.flags & SymbolFlags.Class;
1162011625 // valueType might not have a symbol, eg, {import('./b').STRING_LITERAL}
11621- if (valueType.symbol && (isRequireAlias || isImportTypeWithQualifier)) {
11626+ if (valueType.symbol && (isRequireAlias || isImportOfClassTypeWithQualifier)) {
11627+ // follow fake alias (commonjs or class value->type)
1162211628 typeType = getTypeReferenceType(node, valueType.symbol);
1162311629 }
1162411630 }
@@ -13305,9 +13311,7 @@ namespace ts {
1330513311 links.resolvedSymbol = unknownSymbol;
1330613312 return links.resolvedType = errorType;
1330713313 }
13308- const targetMeaning = node.isTypeOf || isJSDocTypeExpression(node.parent) ? SymbolFlags.Value
13309- : node.flags & NodeFlags.JSDoc ? SymbolFlags.Value | SymbolFlags.Type
13310- : SymbolFlags.Type;
13314+ const targetMeaning = node.isTypeOf ? SymbolFlags.Value : node.flags & NodeFlags.JSDoc ? SymbolFlags.Value | SymbolFlags.Type : SymbolFlags.Type;
1331113315 // TODO: Future work: support unions/generics/whatever via a deferred import-type
1331213316 const innerModuleSymbol = resolveExternalModuleName(node, node.argument.literal);
1331313317 if (!innerModuleSymbol) {
0 commit comments