@@ -29,55 +29,82 @@ type DiscriminatorFalse = {
2929>x : Symbol(x, Decl(tsxDiscriminantPropertyInference.tsx, 12, 9))
3030}
3131
32+ type Unrelated = {
33+ >Unrelated : Symbol(Unrelated, Decl(tsxDiscriminantPropertyInference.tsx, 13, 1))
34+
35+ val: number;
36+ >val : Symbol(val, Decl(tsxDiscriminantPropertyInference.tsx, 15, 18))
37+ }
38+
3239type Props = DiscriminatorTrue | DiscriminatorFalse;
33- >Props : Symbol(Props, Decl(tsxDiscriminantPropertyInference.tsx, 13 , 1))
40+ >Props : Symbol(Props, Decl(tsxDiscriminantPropertyInference.tsx, 17 , 1))
3441>DiscriminatorTrue : Symbol(DiscriminatorTrue, Decl(tsxDiscriminantPropertyInference.tsx, 3, 1))
3542>DiscriminatorFalse : Symbol(DiscriminatorFalse, Decl(tsxDiscriminantPropertyInference.tsx, 8, 1))
3643
37- declare function Comp(props: DiscriminatorTrue | DiscriminatorFalse): JSX.Element;
38- >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 15, 52))
39- >props : Symbol(props, Decl(tsxDiscriminantPropertyInference.tsx, 17, 22))
40- >DiscriminatorTrue : Symbol(DiscriminatorTrue, Decl(tsxDiscriminantPropertyInference.tsx, 3, 1))
41- >DiscriminatorFalse : Symbol(DiscriminatorFalse, Decl(tsxDiscriminantPropertyInference.tsx, 8, 1))
44+ type UnrelatedProps = Props | Unrelated;
45+ >UnrelatedProps : Symbol(UnrelatedProps, Decl(tsxDiscriminantPropertyInference.tsx, 19, 52))
46+ >Props : Symbol(Props, Decl(tsxDiscriminantPropertyInference.tsx, 17, 1))
47+ >Unrelated : Symbol(Unrelated, Decl(tsxDiscriminantPropertyInference.tsx, 13, 1))
48+
49+ declare function Comp(props: Props): JSX.Element;
50+ >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 21, 40))
51+ >props : Symbol(props, Decl(tsxDiscriminantPropertyInference.tsx, 23, 22))
52+ >Props : Symbol(Props, Decl(tsxDiscriminantPropertyInference.tsx, 17, 1))
4253>JSX : Symbol(JSX, Decl(tsxDiscriminantPropertyInference.tsx, 0, 0))
4354>Element : Symbol(JSX.Element, Decl(tsxDiscriminantPropertyInference.tsx, 1, 15))
4455
4556// simple inference
4657void (<Comp disc cb={s => parseInt(s)} />);
47- >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 15, 52 ))
48- >disc : Symbol(disc, Decl(tsxDiscriminantPropertyInference.tsx, 20 , 11))
49- >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 20 , 16))
50- >s : Symbol(s, Decl(tsxDiscriminantPropertyInference.tsx, 20 , 21))
58+ >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 21, 40 ))
59+ >disc : Symbol(disc, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 11))
60+ >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 16))
61+ >s : Symbol(s, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 21))
5162>parseInt : Symbol(parseInt, Decl(lib.es5.d.ts, --, --))
52- >s : Symbol(s, Decl(tsxDiscriminantPropertyInference.tsx, 20 , 21))
63+ >s : Symbol(s, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 21))
5364
5465// simple inference
5566void (<Comp disc={false} cb={n => n.toFixed()} />);
56- >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 15, 52 ))
57- >disc : Symbol(disc, Decl(tsxDiscriminantPropertyInference.tsx, 23 , 11))
58- >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 23 , 24))
59- >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 23 , 29))
67+ >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 21, 40 ))
68+ >disc : Symbol(disc, Decl(tsxDiscriminantPropertyInference.tsx, 29 , 11))
69+ >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 29 , 24))
70+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 29 , 29))
6071>n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
61- >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 23 , 29))
72+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 29 , 29))
6273>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
6374
6475// simple inference when strict-null-checks are enabled
6576void (<Comp disc={undefined} cb={n => n.toFixed()} />);
66- >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 15, 52 ))
67- >disc : Symbol(disc, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 11))
77+ >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 21, 40 ))
78+ >disc : Symbol(disc, Decl(tsxDiscriminantPropertyInference.tsx, 32 , 11))
6879>undefined : Symbol(undefined)
69- >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 28))
70- >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 33))
80+ >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 32 , 28))
81+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 32 , 33))
7182>n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
72- >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 26 , 33))
83+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 32 , 33))
7384>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
7485
7586// requires checking type information since discriminator is missing from object
7687void (<Comp cb={n => n.toFixed()} />);
77- >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 15, 52))
78- >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 29, 11))
79- >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 29, 16))
88+ >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 21, 40))
89+ >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 35, 11))
90+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 35, 16))
91+ >n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
92+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 35, 16))
93+ >toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
94+
95+ declare function UnrelatedComp(props: UnrelatedProps): JSX.Element;
96+ >UnrelatedComp : Symbol(UnrelatedComp, Decl(tsxDiscriminantPropertyInference.tsx, 35, 38))
97+ >props : Symbol(props, Decl(tsxDiscriminantPropertyInference.tsx, 37, 31))
98+ >UnrelatedProps : Symbol(UnrelatedProps, Decl(tsxDiscriminantPropertyInference.tsx, 19, 52))
99+ >JSX : Symbol(JSX, Decl(tsxDiscriminantPropertyInference.tsx, 0, 0))
100+ >Element : Symbol(JSX.Element, Decl(tsxDiscriminantPropertyInference.tsx, 1, 15))
101+
102+ // requires checking properties of all types, rather than properties of just the union type (e.g. only intersection)
103+ void (<Comp cb={n => n.toFixed()} />);
104+ >Comp : Symbol(Comp, Decl(tsxDiscriminantPropertyInference.tsx, 21, 40))
105+ >cb : Symbol(cb, Decl(tsxDiscriminantPropertyInference.tsx, 40, 11))
106+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 40, 16))
80107>n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
81- >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 29 , 16))
108+ >n : Symbol(n, Decl(tsxDiscriminantPropertyInference.tsx, 40 , 16))
82109>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
83110
0 commit comments