@@ -79,3 +79,61 @@ function foo(this: Object | undefined) {
7979 return this ?? 0;
8080>this : Symbol(this, Decl(predicateSemantics.ts, 40, 13))
8181}
82+
83+ // https://github.com/microsoft/TypeScript/issues/60401
84+ {
85+ const maybe = null as true | null;
86+ >maybe : Symbol(maybe, Decl(predicateSemantics.ts, 47, 7))
87+
88+ let i = 0;
89+ >i : Symbol(i, Decl(predicateSemantics.ts, 48, 5))
90+
91+ const d = (i++, maybe) ?? true; // ok
92+ >d : Symbol(d, Decl(predicateSemantics.ts, 49, 7))
93+ >i : Symbol(i, Decl(predicateSemantics.ts, 48, 5))
94+ >maybe : Symbol(maybe, Decl(predicateSemantics.ts, 47, 7))
95+
96+ const e = (i++, i++) ?? true; // error
97+ >e : Symbol(e, Decl(predicateSemantics.ts, 50, 7))
98+ >i : Symbol(i, Decl(predicateSemantics.ts, 48, 5))
99+ >i : Symbol(i, Decl(predicateSemantics.ts, 48, 5))
100+
101+ const f = (maybe, i++) ?? true; // error
102+ >f : Symbol(f, Decl(predicateSemantics.ts, 51, 7))
103+ >maybe : Symbol(maybe, Decl(predicateSemantics.ts, 47, 7))
104+ >i : Symbol(i, Decl(predicateSemantics.ts, 48, 5))
105+ }
106+
107+ // https://github.com/microsoft/TypeScript/issues/60439
108+ class X {
109+ >X : Symbol(X, Decl(predicateSemantics.ts, 52, 1))
110+
111+ constructor() {
112+ const p = new.target ?? 32;
113+ >p : Symbol(p, Decl(predicateSemantics.ts, 57, 9))
114+ >new.target : Symbol(X, Decl(predicateSemantics.ts, 52, 1))
115+ >target : Symbol(X, Decl(predicateSemantics.ts, 52, 1))
116+ }
117+ }
118+
119+ // https://github.com/microsoft/TypeScript/issues/60614
120+ declare function tag<T>(
121+ >tag : Symbol(tag, Decl(predicateSemantics.ts, 59, 1))
122+ >T : Symbol(T, Decl(predicateSemantics.ts, 62, 21))
123+
124+ strings: TemplateStringsArray,
125+ >strings : Symbol(strings, Decl(predicateSemantics.ts, 62, 24))
126+ >TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --))
127+
128+ ...values: number[]
129+ >values : Symbol(values, Decl(predicateSemantics.ts, 63, 32))
130+
131+ ): T | null;
132+ >T : Symbol(T, Decl(predicateSemantics.ts, 62, 21))
133+
134+ tag`foo${1}` ?? 32; // ok
135+ >tag : Symbol(tag, Decl(predicateSemantics.ts, 59, 1))
136+
137+ `foo${1}` ?? 32; // error
138+ `foo` ?? 32; // error
139+
0 commit comments