Skip to content

Commit 429b88f

Browse files
committed
Add another example from an issue, albeit slightly modified
1 parent c6fde09 commit 429b88f

4 files changed

+496
-10
lines changed

tests/baselines/reference/contextualOverloadListFromArrayUnion.js

+100-10
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,106 @@ declare const y: never[] | string[];
55
export const yThen = y.map(item => item.length);
66
//// [two.ts]
77
declare const y: number[][] | string[];
8-
export const yThen = y.map(item => item.length);
9-
8+
export const yThen = y.map(item => item.length);
9+
//// [three.ts]
10+
// #42504
11+
interface ResizeObserverCallback {
12+
(entries: ResizeObserverEntry[], observer: ResizeObserver): void;
13+
}
14+
interface ResizeObserverCallback { // duplicate for effect
15+
(entries: ResizeObserverEntry[], observer: ResizeObserver): void;
16+
}
17+
18+
const resizeObserver = new ResizeObserver(([entry]) => {
19+
entry
20+
});
21+
// comment in #35501
22+
interface Callback<T> {
23+
(error: null, result: T): unknown
24+
(error: Error, result: null): unknown
25+
}
26+
27+
interface Task<T> {
28+
(callback: Callback<T>): unknown
29+
}
30+
31+
export function series<T>(tasks: Task<T>[], callback: Callback<T[]>): void {
32+
let index = 0
33+
let results: T[] = []
34+
35+
function next() {
36+
let task = tasks[index]
37+
if (!task) {
38+
callback(null, results)
39+
} else {
40+
task((error, result) => {
41+
if (error) {
42+
callback(error, null)
43+
} else {
44+
// must use postfix-!, since `error` and `result` don't have a
45+
// causal relationship when the overloads are combined
46+
results.push(result!)
47+
next()
48+
}
49+
})
50+
}
51+
}
52+
next()
53+
}
54+
55+
series([
56+
cb => setTimeout(() => cb(null, 1), 300),
57+
cb => setTimeout(() => cb(null, 2), 200),
58+
cb => setTimeout(() => cb(null, 3), 100),
59+
], (error, results) => {
60+
if (error) {
61+
console.error(error)
62+
} else {
63+
console.log(results)
64+
}
65+
})
1066

1167
//// [one.js]
12-
"use strict";
13-
exports.__esModule = true;
14-
exports.yThen = void 0;
15-
exports.yThen = y.map(function (item) { return item.length; });
68+
export const yThen = y.map(item => item.length);
1669
//// [two.js]
17-
"use strict";
18-
exports.__esModule = true;
19-
exports.yThen = void 0;
20-
exports.yThen = y.map(function (item) { return item.length; });
70+
export const yThen = y.map(item => item.length);
71+
//// [three.js]
72+
const resizeObserver = new ResizeObserver(([entry]) => {
73+
entry;
74+
});
75+
export function series(tasks, callback) {
76+
let index = 0;
77+
let results = [];
78+
function next() {
79+
let task = tasks[index];
80+
if (!task) {
81+
callback(null, results);
82+
}
83+
else {
84+
task((error, result) => {
85+
if (error) {
86+
callback(error, null);
87+
}
88+
else {
89+
// must use postfix-!, since `error` and `result` don't have a
90+
// causal relationship when the overloads are combined
91+
results.push(result);
92+
next();
93+
}
94+
});
95+
}
96+
}
97+
next();
98+
}
99+
series([
100+
cb => setTimeout(() => cb(null, 1), 300),
101+
cb => setTimeout(() => cb(null, 2), 200),
102+
cb => setTimeout(() => cb(null, 3), 100),
103+
], (error, results) => {
104+
if (error) {
105+
console.error(error);
106+
}
107+
else {
108+
console.log(results);
109+
}
110+
});

tests/baselines/reference/contextualOverloadListFromArrayUnion.symbols

+159
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,162 @@ export const yThen = y.map(item => item.length);
2626
>item : Symbol(item, Decl(two.ts, 1, 27))
2727
>length : Symbol(length, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
2828

29+
=== tests/cases/compiler/three.ts ===
30+
// #42504
31+
interface ResizeObserverCallback {
32+
>ResizeObserverCallback : Symbol(ResizeObserverCallback, Decl(three.ts, 0, 0), Decl(three.ts, 3, 1))
33+
34+
(entries: ResizeObserverEntry[], observer: ResizeObserver): void;
35+
>entries : Symbol(entries, Decl(three.ts, 2, 5))
36+
>ResizeObserverEntry : Symbol(ResizeObserverEntry, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
37+
>observer : Symbol(observer, Decl(three.ts, 2, 36))
38+
>ResizeObserver : Symbol(ResizeObserver, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
39+
}
40+
interface ResizeObserverCallback { // duplicate for effect
41+
>ResizeObserverCallback : Symbol(ResizeObserverCallback, Decl(three.ts, 0, 0), Decl(three.ts, 3, 1))
42+
43+
(entries: ResizeObserverEntry[], observer: ResizeObserver): void;
44+
>entries : Symbol(entries, Decl(three.ts, 5, 5))
45+
>ResizeObserverEntry : Symbol(ResizeObserverEntry, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
46+
>observer : Symbol(observer, Decl(three.ts, 5, 36))
47+
>ResizeObserver : Symbol(ResizeObserver, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
48+
}
49+
50+
const resizeObserver = new ResizeObserver(([entry]) => {
51+
>resizeObserver : Symbol(resizeObserver, Decl(three.ts, 8, 5))
52+
>ResizeObserver : Symbol(ResizeObserver, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
53+
>entry : Symbol(entry, Decl(three.ts, 8, 44))
54+
55+
entry
56+
>entry : Symbol(entry, Decl(three.ts, 8, 44))
57+
58+
});
59+
// comment in #35501
60+
interface Callback<T> {
61+
>Callback : Symbol(Callback, Decl(three.ts, 10, 3))
62+
>T : Symbol(T, Decl(three.ts, 12, 19))
63+
64+
(error: null, result: T): unknown
65+
>error : Symbol(error, Decl(three.ts, 13, 5))
66+
>result : Symbol(result, Decl(three.ts, 13, 17))
67+
>T : Symbol(T, Decl(three.ts, 12, 19))
68+
69+
(error: Error, result: null): unknown
70+
>error : Symbol(error, Decl(three.ts, 14, 5))
71+
>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
72+
>result : Symbol(result, Decl(three.ts, 14, 18))
73+
}
74+
75+
interface Task<T> {
76+
>Task : Symbol(Task, Decl(three.ts, 15, 1))
77+
>T : Symbol(T, Decl(three.ts, 17, 15))
78+
79+
(callback: Callback<T>): unknown
80+
>callback : Symbol(callback, Decl(three.ts, 18, 5))
81+
>Callback : Symbol(Callback, Decl(three.ts, 10, 3))
82+
>T : Symbol(T, Decl(three.ts, 17, 15))
83+
}
84+
85+
export function series<T>(tasks: Task<T>[], callback: Callback<T[]>): void {
86+
>series : Symbol(series, Decl(three.ts, 19, 1))
87+
>T : Symbol(T, Decl(three.ts, 21, 23))
88+
>tasks : Symbol(tasks, Decl(three.ts, 21, 26))
89+
>Task : Symbol(Task, Decl(three.ts, 15, 1))
90+
>T : Symbol(T, Decl(three.ts, 21, 23))
91+
>callback : Symbol(callback, Decl(three.ts, 21, 43))
92+
>Callback : Symbol(Callback, Decl(three.ts, 10, 3))
93+
>T : Symbol(T, Decl(three.ts, 21, 23))
94+
95+
let index = 0
96+
>index : Symbol(index, Decl(three.ts, 22, 7))
97+
98+
let results: T[] = []
99+
>results : Symbol(results, Decl(three.ts, 23, 7))
100+
>T : Symbol(T, Decl(three.ts, 21, 23))
101+
102+
function next() {
103+
>next : Symbol(next, Decl(three.ts, 23, 25))
104+
105+
let task = tasks[index]
106+
>task : Symbol(task, Decl(three.ts, 26, 11))
107+
>tasks : Symbol(tasks, Decl(three.ts, 21, 26))
108+
>index : Symbol(index, Decl(three.ts, 22, 7))
109+
110+
if (!task) {
111+
>task : Symbol(task, Decl(three.ts, 26, 11))
112+
113+
callback(null, results)
114+
>callback : Symbol(callback, Decl(three.ts, 21, 43))
115+
>results : Symbol(results, Decl(three.ts, 23, 7))
116+
117+
} else {
118+
task((error, result) => {
119+
>task : Symbol(task, Decl(three.ts, 26, 11))
120+
>error : Symbol(error, Decl(three.ts, 30, 18))
121+
>result : Symbol(result, Decl(three.ts, 30, 24))
122+
123+
if (error) {
124+
>error : Symbol(error, Decl(three.ts, 30, 18))
125+
126+
callback(error, null)
127+
>callback : Symbol(callback, Decl(three.ts, 21, 43))
128+
>error : Symbol(error, Decl(three.ts, 30, 18))
129+
130+
} else {
131+
// must use postfix-!, since `error` and `result` don't have a
132+
// causal relationship when the overloads are combined
133+
results.push(result!)
134+
>results.push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
135+
>results : Symbol(results, Decl(three.ts, 23, 7))
136+
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
137+
>result : Symbol(result, Decl(three.ts, 30, 24))
138+
139+
next()
140+
>next : Symbol(next, Decl(three.ts, 23, 25))
141+
}
142+
})
143+
}
144+
}
145+
next()
146+
>next : Symbol(next, Decl(three.ts, 23, 25))
147+
}
148+
149+
series([
150+
>series : Symbol(series, Decl(three.ts, 19, 1))
151+
152+
cb => setTimeout(() => cb(null, 1), 300),
153+
>cb : Symbol(cb, Decl(three.ts, 45, 8))
154+
>setTimeout : Symbol(setTimeout, Decl(lib.dom.d.ts, --, --))
155+
>cb : Symbol(cb, Decl(three.ts, 45, 8))
156+
157+
cb => setTimeout(() => cb(null, 2), 200),
158+
>cb : Symbol(cb, Decl(three.ts, 46, 45))
159+
>setTimeout : Symbol(setTimeout, Decl(lib.dom.d.ts, --, --))
160+
>cb : Symbol(cb, Decl(three.ts, 46, 45))
161+
162+
cb => setTimeout(() => cb(null, 3), 100),
163+
>cb : Symbol(cb, Decl(three.ts, 47, 45))
164+
>setTimeout : Symbol(setTimeout, Decl(lib.dom.d.ts, --, --))
165+
>cb : Symbol(cb, Decl(three.ts, 47, 45))
166+
167+
], (error, results) => {
168+
>error : Symbol(error, Decl(three.ts, 49, 4))
169+
>results : Symbol(results, Decl(three.ts, 49, 10))
170+
171+
if (error) {
172+
>error : Symbol(error, Decl(three.ts, 49, 4))
173+
174+
console.error(error)
175+
>console.error : Symbol(Console.error, Decl(lib.dom.d.ts, --, --))
176+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
177+
>error : Symbol(Console.error, Decl(lib.dom.d.ts, --, --))
178+
>error : Symbol(error, Decl(three.ts, 49, 4))
179+
180+
} else {
181+
console.log(results)
182+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
183+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
184+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
185+
>results : Symbol(results, Decl(three.ts, 49, 10))
186+
}
187+
})

0 commit comments

Comments
 (0)