Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Use new fallback to print inferred type when reusing existing type no…
…des.
  • Loading branch information
dragomirtitian committed May 30, 2024
commit 96f5b3506174af0927a694d9dc6370c234f02e25
22 changes: 16 additions & 6 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8703,7 +8703,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
if (canReuseTypeNode(context, node)) {
return node;
}
return serializeExistingTypeNode(context, node);
hadError = true;
return node;
}
if (isTypeParameterDeclaration(node)) {
return factory.updateTypeParameterDeclaration(
Expand All @@ -8718,13 +8719,19 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
if (isIndexedAccessTypeNode(node) && isTypeReferenceNode(node.objectType)) {
const objectType = tryVisitTypeReference(node.objectType);
if (!objectType) {
return serializeExistingTypeNode(context, node);
hadError = true;
return node;
}
return factory.updateIndexedAccessTypeNode(node, objectType, visitNode(node.indexType, visitExistingNodeTreeSymbols, isTypeNode)!);
}

if (isTypeReferenceNode(node)) {
return tryVisitTypeReference(node) ?? serializeExistingTypeNode(context, node);
const result = tryVisitTypeReference(node);
if (result) {
return result;
}
hadError = true;
return node;
}
if (isLiteralImportTypeNode(node)) {
const nodeSymbol = getNodeLinks(node).resolvedSymbol;
Expand Down Expand Up @@ -8777,7 +8784,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
if (serializedName) {
return setTextRange(context, serializedName, node.exprName);
}
return serializeExistingTypeNode(context, node);
hadError = true;
return node;
}
return factory.updateTypeQueryNode(
node,
Expand Down Expand Up @@ -8852,14 +8860,16 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
if (isTypeOperatorNode(node)) {
if (node.operator === SyntaxKind.UniqueKeyword && node.type.kind === SyntaxKind.SymbolKeyword) {
if (!canReuseTypeNode(context, node)) {
return serializeExistingTypeNode(context, node);
hadError = true;
return node;
}
}
else if (node.operator === SyntaxKind.KeyOfKeyword) {
if (isTypeReferenceNode(node.type)) {
const type = tryVisitTypeReference(node.type);
if (!type) {
return serializeExistingTypeNode(context, node);
hadError = true;
return node;
}
return factory.updateTypeOperatorNode(node, type);
}
Expand Down