diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index dbce5f41ef4b4..b6e68cb1dc329 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6524,6 +6524,7 @@ namespace ts { let targetStack: Type[]; let depth = 0; let inferiority = 0; + const visited: Map = {}; inferFromTypes(source, target); function isInProcess(source: Type, target: Type) { @@ -6653,6 +6654,12 @@ namespace ts { return; } + const key = source.id + "," + target.id; + if (hasProperty(visited, key)) { + return; + } + visited[key] = true; + if (depth === 0) { sourceStack = []; targetStack = []; diff --git a/src/server/protocol.d.ts b/src/server/protocol.d.ts index b8207570ea2d7..c50f211a21f56 100644 --- a/src/server/protocol.d.ts +++ b/src/server/protocol.d.ts @@ -469,7 +469,7 @@ declare namespace ts.server.protocol { placeOpenBraceOnNewLineForControlBlocks?: boolean; /** Index operator */ - [key: string]: string | number | boolean; + [key: string]: string | number | boolean; } /**