@@ -1832,3 +1832,48 @@ while (arr[i]?.tag === "left") {
18321832 }
18331833}
18341834
1835+
1836+ // Repro from #51941
1837+
1838+ type Test5 = {
1839+ >Test5 : Symbol(Test5, Decl(controlFlowOptionalChain.ts, 588, 1))
1840+
1841+ main?: {
1842+ >main : Symbol(main, Decl(controlFlowOptionalChain.ts, 593, 14))
1843+
1844+ childs: Record<string, Test5>;
1845+ >childs : Symbol(childs, Decl(controlFlowOptionalChain.ts, 594, 10))
1846+ >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
1847+ >Test5 : Symbol(Test5, Decl(controlFlowOptionalChain.ts, 588, 1))
1848+
1849+ };
1850+ };
1851+
1852+ function f50(obj: Test5) {
1853+ >f50 : Symbol(f50, Decl(controlFlowOptionalChain.ts, 597, 2))
1854+ >obj : Symbol(obj, Decl(controlFlowOptionalChain.ts, 599, 13))
1855+ >Test5 : Symbol(Test5, Decl(controlFlowOptionalChain.ts, 588, 1))
1856+
1857+ for (const key in obj.main?.childs) {
1858+ >key : Symbol(key, Decl(controlFlowOptionalChain.ts, 600, 13))
1859+ >obj.main?.childs : Symbol(childs, Decl(controlFlowOptionalChain.ts, 594, 10))
1860+ >obj.main : Symbol(main, Decl(controlFlowOptionalChain.ts, 593, 14))
1861+ >obj : Symbol(obj, Decl(controlFlowOptionalChain.ts, 599, 13))
1862+ >main : Symbol(main, Decl(controlFlowOptionalChain.ts, 593, 14))
1863+ >childs : Symbol(childs, Decl(controlFlowOptionalChain.ts, 594, 10))
1864+
1865+ if (obj.main.childs[key] === obj) {
1866+ >obj.main.childs : Symbol(childs, Decl(controlFlowOptionalChain.ts, 594, 10))
1867+ >obj.main : Symbol(main, Decl(controlFlowOptionalChain.ts, 593, 14))
1868+ >obj : Symbol(obj, Decl(controlFlowOptionalChain.ts, 599, 13))
1869+ >main : Symbol(main, Decl(controlFlowOptionalChain.ts, 593, 14))
1870+ >childs : Symbol(childs, Decl(controlFlowOptionalChain.ts, 594, 10))
1871+ >key : Symbol(key, Decl(controlFlowOptionalChain.ts, 600, 13))
1872+ >obj : Symbol(obj, Decl(controlFlowOptionalChain.ts, 599, 13))
1873+
1874+ return obj;
1875+ >obj : Symbol(obj, Decl(controlFlowOptionalChain.ts, 599, 13))
1876+ }
1877+ }
1878+ return null;
1879+ }
0 commit comments