Skip to content

Commit 6d46850

Browse files
committed
Accept new baselines
1 parent f929a25 commit 6d46850

File tree

4 files changed

+173
-20
lines changed

4 files changed

+173
-20
lines changed

tests/baselines/reference/unionTypeInference.errors.txt

+17
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,21 @@ tests/cases/conformance/types/typeRelationships/typeInference/unionTypeInference
5858

5959
declare function bar<T>(x: T, y: string | T): T;
6060
const y = bar(1, 2);
61+
62+
// Repro from #32752
63+
64+
const containsPromises: unique symbol = Symbol();
65+
66+
type DeepPromised<T> =
67+
{ [containsPromises]?: true } &
68+
{ [TKey in keyof T]: T[TKey] | DeepPromised<T[TKey]> | Promise<DeepPromised<T[TKey]>> };
69+
70+
async function fun<T>(deepPromised: DeepPromised<T>) {
71+
const deepPromisedWithIndexer: DeepPromised<{ [name: string]: {} | null | undefined }> = deepPromised;
72+
for (const value of Object.values(deepPromisedWithIndexer)) {
73+
const awaitedValue = await value;
74+
if (awaitedValue)
75+
await fun(awaitedValue);
76+
}
77+
}
6178

tests/baselines/reference/unionTypeInference.js

+43-18
Original file line numberDiff line numberDiff line change
@@ -50,29 +50,54 @@ foo(x);
5050

5151
declare function bar<T>(x: T, y: string | T): T;
5252
const y = bar(1, 2);
53+
54+
// Repro from #32752
55+
56+
const containsPromises: unique symbol = Symbol();
57+
58+
type DeepPromised<T> =
59+
{ [containsPromises]?: true } &
60+
{ [TKey in keyof T]: T[TKey] | DeepPromised<T[TKey]> | Promise<DeepPromised<T[TKey]>> };
61+
62+
async function fun<T>(deepPromised: DeepPromised<T>) {
63+
const deepPromisedWithIndexer: DeepPromised<{ [name: string]: {} | null | undefined }> = deepPromised;
64+
for (const value of Object.values(deepPromisedWithIndexer)) {
65+
const awaitedValue = await value;
66+
if (awaitedValue)
67+
await fun(awaitedValue);
68+
}
69+
}
5370

5471

5572
//// [unionTypeInference.js]
56-
"use strict";
57-
exports.__esModule = true;
58-
var a1 = f1(1, 2); // 1 | 2
59-
var a2 = f1(1, "hello"); // 1
60-
var a3 = f1(1, sn); // number
61-
var a4 = f1(undefined, "abc"); // undefined
62-
var a5 = f1("foo", "bar"); // "foo"
63-
var a6 = f1(true, false); // boolean
64-
var a7 = f1("hello", 1); // Error
73+
const a1 = f1(1, 2); // 1 | 2
74+
const a2 = f1(1, "hello"); // 1
75+
const a3 = f1(1, sn); // number
76+
const a4 = f1(undefined, "abc"); // undefined
77+
const a5 = f1("foo", "bar"); // "foo"
78+
const a6 = f1(true, false); // boolean
79+
const a7 = f1("hello", 1); // Error
6580
var b1 = f2(["string", true]); // boolean
66-
var c1 = f3(5); // 5
67-
var c2 = f3(sn); // number
68-
var c3 = f3(true); // true
69-
var c4 = f3(b); // true
70-
var c5 = f3("abc"); // never
71-
var d1 = f4("abc");
72-
var d2 = f4(s);
73-
var d3 = f4(42); // Error
81+
const c1 = f3(5); // 5
82+
const c2 = f3(sn); // number
83+
const c3 = f3(true); // true
84+
const c4 = f3(b); // true
85+
const c5 = f3("abc"); // never
86+
const d1 = f4("abc");
87+
const d2 = f4(s);
88+
const d3 = f4(42); // Error
7489
function qux(p1, p2) {
7590
p1 = p2;
7691
}
7792
foo(x);
78-
var y = bar(1, 2);
93+
const y = bar(1, 2);
94+
// Repro from #32752
95+
const containsPromises = Symbol();
96+
async function fun(deepPromised) {
97+
const deepPromisedWithIndexer = deepPromised;
98+
for (const value of Object.values(deepPromisedWithIndexer)) {
99+
const awaitedValue = await value;
100+
if (awaitedValue)
101+
await fun(awaitedValue);
102+
}
103+
}

tests/baselines/reference/unionTypeInference.symbols

+62-2
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,12 @@ declare function foo<T>(x: T | Promise<T>): void;
163163
>T : Symbol(T, Decl(unionTypeInference.ts, 45, 21))
164164
>x : Symbol(x, Decl(unionTypeInference.ts, 45, 24))
165165
>T : Symbol(T, Decl(unionTypeInference.ts, 45, 21))
166-
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --))
166+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
167167
>T : Symbol(T, Decl(unionTypeInference.ts, 45, 21))
168168

169169
declare let x: false | Promise<true>;
170170
>x : Symbol(x, Decl(unionTypeInference.ts, 46, 11))
171-
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --))
171+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
172172

173173
foo(x);
174174
>foo : Symbol(foo, Decl(unionTypeInference.ts, 41, 1))
@@ -187,3 +187,63 @@ const y = bar(1, 2);
187187
>y : Symbol(y, Decl(unionTypeInference.ts, 50, 5))
188188
>bar : Symbol(bar, Decl(unionTypeInference.ts, 47, 7))
189189

190+
// Repro from #32752
191+
192+
const containsPromises: unique symbol = Symbol();
193+
>containsPromises : Symbol(containsPromises, Decl(unionTypeInference.ts, 54, 5))
194+
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --))
195+
196+
type DeepPromised<T> =
197+
>DeepPromised : Symbol(DeepPromised, Decl(unionTypeInference.ts, 54, 49))
198+
>T : Symbol(T, Decl(unionTypeInference.ts, 56, 18))
199+
200+
{ [containsPromises]?: true } &
201+
>[containsPromises] : Symbol([containsPromises], Decl(unionTypeInference.ts, 57, 5))
202+
>containsPromises : Symbol(containsPromises, Decl(unionTypeInference.ts, 54, 5))
203+
204+
{ [TKey in keyof T]: T[TKey] | DeepPromised<T[TKey]> | Promise<DeepPromised<T[TKey]>> };
205+
>TKey : Symbol(TKey, Decl(unionTypeInference.ts, 58, 7))
206+
>T : Symbol(T, Decl(unionTypeInference.ts, 56, 18))
207+
>T : Symbol(T, Decl(unionTypeInference.ts, 56, 18))
208+
>TKey : Symbol(TKey, Decl(unionTypeInference.ts, 58, 7))
209+
>DeepPromised : Symbol(DeepPromised, Decl(unionTypeInference.ts, 54, 49))
210+
>T : Symbol(T, Decl(unionTypeInference.ts, 56, 18))
211+
>TKey : Symbol(TKey, Decl(unionTypeInference.ts, 58, 7))
212+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
213+
>DeepPromised : Symbol(DeepPromised, Decl(unionTypeInference.ts, 54, 49))
214+
>T : Symbol(T, Decl(unionTypeInference.ts, 56, 18))
215+
>TKey : Symbol(TKey, Decl(unionTypeInference.ts, 58, 7))
216+
217+
async function fun<T>(deepPromised: DeepPromised<T>) {
218+
>fun : Symbol(fun, Decl(unionTypeInference.ts, 58, 92))
219+
>T : Symbol(T, Decl(unionTypeInference.ts, 60, 19))
220+
>deepPromised : Symbol(deepPromised, Decl(unionTypeInference.ts, 60, 22))
221+
>DeepPromised : Symbol(DeepPromised, Decl(unionTypeInference.ts, 54, 49))
222+
>T : Symbol(T, Decl(unionTypeInference.ts, 60, 19))
223+
224+
const deepPromisedWithIndexer: DeepPromised<{ [name: string]: {} | null | undefined }> = deepPromised;
225+
>deepPromisedWithIndexer : Symbol(deepPromisedWithIndexer, Decl(unionTypeInference.ts, 61, 9))
226+
>DeepPromised : Symbol(DeepPromised, Decl(unionTypeInference.ts, 54, 49))
227+
>name : Symbol(name, Decl(unionTypeInference.ts, 61, 51))
228+
>deepPromised : Symbol(deepPromised, Decl(unionTypeInference.ts, 60, 22))
229+
230+
for (const value of Object.values(deepPromisedWithIndexer)) {
231+
>value : Symbol(value, Decl(unionTypeInference.ts, 62, 14))
232+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
233+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
234+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
235+
>deepPromisedWithIndexer : Symbol(deepPromisedWithIndexer, Decl(unionTypeInference.ts, 61, 9))
236+
237+
const awaitedValue = await value;
238+
>awaitedValue : Symbol(awaitedValue, Decl(unionTypeInference.ts, 63, 13))
239+
>value : Symbol(value, Decl(unionTypeInference.ts, 62, 14))
240+
241+
if (awaitedValue)
242+
>awaitedValue : Symbol(awaitedValue, Decl(unionTypeInference.ts, 63, 13))
243+
244+
await fun(awaitedValue);
245+
>fun : Symbol(fun, Decl(unionTypeInference.ts, 58, 92))
246+
>awaitedValue : Symbol(awaitedValue, Decl(unionTypeInference.ts, 63, 13))
247+
}
248+
}
249+

tests/baselines/reference/unionTypeInference.types

+51
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,54 @@ const y = bar(1, 2);
185185
>1 : 1
186186
>2 : 2
187187

188+
// Repro from #32752
189+
190+
const containsPromises: unique symbol = Symbol();
191+
>containsPromises : unique symbol
192+
>Symbol() : unique symbol
193+
>Symbol : SymbolConstructor
194+
195+
type DeepPromised<T> =
196+
>DeepPromised : DeepPromised<T>
197+
198+
{ [containsPromises]?: true } &
199+
>[containsPromises] : true | undefined
200+
>containsPromises : unique symbol
201+
>true : true
202+
203+
{ [TKey in keyof T]: T[TKey] | DeepPromised<T[TKey]> | Promise<DeepPromised<T[TKey]>> };
204+
205+
async function fun<T>(deepPromised: DeepPromised<T>) {
206+
>fun : <T>(deepPromised: DeepPromised<T>) => Promise<void>
207+
>deepPromised : DeepPromised<T>
208+
209+
const deepPromisedWithIndexer: DeepPromised<{ [name: string]: {} | null | undefined }> = deepPromised;
210+
>deepPromisedWithIndexer : DeepPromised<{ [name: string]: {} | null | undefined; }>
211+
>name : string
212+
>null : null
213+
>deepPromised : DeepPromised<T>
214+
215+
for (const value of Object.values(deepPromisedWithIndexer)) {
216+
>value : {} | ({ [containsPromises]?: true | undefined; } & {}) | Promise<{ [containsPromises]?: true | undefined; } & {}> | null | undefined
217+
>Object.values(deepPromisedWithIndexer) : ({} | ({ [containsPromises]?: true | undefined; } & {}) | Promise<{ [containsPromises]?: true | undefined; } & {}> | null | undefined)[]
218+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
219+
>Object : ObjectConstructor
220+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
221+
>deepPromisedWithIndexer : DeepPromised<{ [name: string]: {} | null | undefined; }>
222+
223+
const awaitedValue = await value;
224+
>awaitedValue : {} | ({ [containsPromises]?: true | undefined; } & {}) | null | undefined
225+
>await value : {} | ({ [containsPromises]?: true | undefined; } & {}) | null | undefined
226+
>value : {} | ({ [containsPromises]?: true | undefined; } & {}) | Promise<{ [containsPromises]?: true | undefined; } & {}> | null | undefined
227+
228+
if (awaitedValue)
229+
>awaitedValue : {} | ({ [containsPromises]?: true | undefined; } & {}) | null | undefined
230+
231+
await fun(awaitedValue);
232+
>await fun(awaitedValue) : void
233+
>fun(awaitedValue) : Promise<void>
234+
>fun : <T>(deepPromised: DeepPromised<T>) => Promise<void>
235+
>awaitedValue : {} | ({ [containsPromises]?: true | undefined; } & {})
236+
}
237+
}
238+

0 commit comments

Comments
 (0)