@@ -311,3 +311,69 @@ function func2(inst: Instance) {
311311 }
312312}
313313
314+ // Repro from #29106
315+
316+ const f = (_a: string, _b: string): void => {};
317+ >f : Symbol(f, Decl(discriminantPropertyCheck.ts, 102, 5))
318+ >_a : Symbol(_a, Decl(discriminantPropertyCheck.ts, 102, 11))
319+ >_b : Symbol(_b, Decl(discriminantPropertyCheck.ts, 102, 22))
320+
321+ interface A {
322+ >A : Symbol(A, Decl(discriminantPropertyCheck.ts, 102, 47))
323+
324+ a?: string;
325+ >a : Symbol(A.a, Decl(discriminantPropertyCheck.ts, 104, 13))
326+
327+ b?: string;
328+ >b : Symbol(A.b, Decl(discriminantPropertyCheck.ts, 105, 13))
329+ }
330+
331+ interface B {
332+ >B : Symbol(B, Decl(discriminantPropertyCheck.ts, 107, 1))
333+
334+ a: string;
335+ >a : Symbol(B.a, Decl(discriminantPropertyCheck.ts, 109, 13))
336+
337+ b: string;
338+ >b : Symbol(B.b, Decl(discriminantPropertyCheck.ts, 110, 12))
339+ }
340+
341+ type U = A | B;
342+ >U : Symbol(U, Decl(discriminantPropertyCheck.ts, 112, 1))
343+ >A : Symbol(A, Decl(discriminantPropertyCheck.ts, 102, 47))
344+ >B : Symbol(B, Decl(discriminantPropertyCheck.ts, 107, 1))
345+
346+ const u: U = {} as any;
347+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
348+ >U : Symbol(U, Decl(discriminantPropertyCheck.ts, 112, 1))
349+
350+ u.a && u.b && f(u.a, u.b);
351+ >u.a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
352+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
353+ >a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
354+ >u.b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
355+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
356+ >b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
357+ >f : Symbol(f, Decl(discriminantPropertyCheck.ts, 102, 5))
358+ >u.a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
359+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
360+ >a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
361+ >u.b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
362+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
363+ >b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
364+
365+ u.b && u.a && f(u.a, u.b);
366+ >u.b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
367+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
368+ >b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
369+ >u.a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
370+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
371+ >a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
372+ >f : Symbol(f, Decl(discriminantPropertyCheck.ts, 102, 5))
373+ >u.a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
374+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
375+ >a : Symbol(a, Decl(discriminantPropertyCheck.ts, 104, 13), Decl(discriminantPropertyCheck.ts, 109, 13))
376+ >u.b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
377+ >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
378+ >b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
379+
0 commit comments