Skip to content

Commit 7c22dcb

Browse files
committed
Add regression test
1 parent 6a261ad commit 7c22dcb

File tree

3 files changed

+143
-0
lines changed

3 files changed

+143
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
=== tests/cases/compiler/contextualTypeCaching.ts ===
2+
// Repro from #52575
3+
4+
export interface Event<T> {
5+
>Event : Symbol(Event, Decl(contextualTypeCaching.ts, 0, 0))
6+
>T : Symbol(T, Decl(contextualTypeCaching.ts, 2, 23))
7+
8+
callback: (response: T) => void;
9+
>callback : Symbol(Event.callback, Decl(contextualTypeCaching.ts, 2, 27))
10+
>response : Symbol(response, Decl(contextualTypeCaching.ts, 3, 15))
11+
>T : Symbol(T, Decl(contextualTypeCaching.ts, 2, 23))
12+
13+
nested: {
14+
>nested : Symbol(Event.nested, Decl(contextualTypeCaching.ts, 3, 36))
15+
16+
nestedCallback: (response: T) => void;
17+
>nestedCallback : Symbol(nestedCallback, Decl(contextualTypeCaching.ts, 4, 13))
18+
>response : Symbol(response, Decl(contextualTypeCaching.ts, 5, 25))
19+
>T : Symbol(T, Decl(contextualTypeCaching.ts, 2, 23))
20+
}
21+
}
22+
23+
export type CustomEvents = {
24+
>CustomEvents : Symbol(CustomEvents, Decl(contextualTypeCaching.ts, 7, 1))
25+
26+
a: Event<string>
27+
>a : Symbol(a, Decl(contextualTypeCaching.ts, 9, 28))
28+
>Event : Symbol(Event, Decl(contextualTypeCaching.ts, 0, 0))
29+
30+
b: Event<number>
31+
>b : Symbol(b, Decl(contextualTypeCaching.ts, 10, 20))
32+
>Event : Symbol(Event, Decl(contextualTypeCaching.ts, 0, 0))
33+
34+
};
35+
36+
declare function emit<T extends keyof CustomEvents>(type: T, data: CustomEvents[T]): void
37+
>emit : Symbol(emit, Decl(contextualTypeCaching.ts, 12, 2))
38+
>T : Symbol(T, Decl(contextualTypeCaching.ts, 14, 22))
39+
>CustomEvents : Symbol(CustomEvents, Decl(contextualTypeCaching.ts, 7, 1))
40+
>type : Symbol(type, Decl(contextualTypeCaching.ts, 14, 52))
41+
>T : Symbol(T, Decl(contextualTypeCaching.ts, 14, 22))
42+
>data : Symbol(data, Decl(contextualTypeCaching.ts, 14, 60))
43+
>CustomEvents : Symbol(CustomEvents, Decl(contextualTypeCaching.ts, 7, 1))
44+
>T : Symbol(T, Decl(contextualTypeCaching.ts, 14, 22))
45+
46+
emit('a', {
47+
>emit : Symbol(emit, Decl(contextualTypeCaching.ts, 12, 2))
48+
49+
callback: (r) => {},
50+
>callback : Symbol(callback, Decl(contextualTypeCaching.ts, 16, 11))
51+
>r : Symbol(r, Decl(contextualTypeCaching.ts, 17, 15))
52+
53+
nested: {
54+
>nested : Symbol(nested, Decl(contextualTypeCaching.ts, 17, 24))
55+
56+
nestedCallback: (r) => {},
57+
>nestedCallback : Symbol(nestedCallback, Decl(contextualTypeCaching.ts, 18, 13))
58+
>r : Symbol(r, Decl(contextualTypeCaching.ts, 19, 25))
59+
60+
},
61+
});
62+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
=== tests/cases/compiler/contextualTypeCaching.ts ===
2+
// Repro from #52575
3+
4+
export interface Event<T> {
5+
callback: (response: T) => void;
6+
>callback : (response: T) => void
7+
>response : T
8+
9+
nested: {
10+
>nested : { nestedCallback: (response: T) => void; }
11+
12+
nestedCallback: (response: T) => void;
13+
>nestedCallback : (response: T) => void
14+
>response : T
15+
}
16+
}
17+
18+
export type CustomEvents = {
19+
>CustomEvents : { a: Event<string>; b: Event<number>; }
20+
21+
a: Event<string>
22+
>a : Event<string>
23+
24+
b: Event<number>
25+
>b : Event<number>
26+
27+
};
28+
29+
declare function emit<T extends keyof CustomEvents>(type: T, data: CustomEvents[T]): void
30+
>emit : <T extends keyof CustomEvents>(type: T, data: CustomEvents[T]) => void
31+
>type : T
32+
>data : CustomEvents[T]
33+
34+
emit('a', {
35+
>emit('a', { callback: (r) => {}, nested: { nestedCallback: (r) => {}, },}) : void
36+
>emit : <T extends keyof CustomEvents>(type: T, data: CustomEvents[T]) => void
37+
>'a' : "a"
38+
>{ callback: (r) => {}, nested: { nestedCallback: (r) => {}, },} : { callback: (r: string) => void; nested: { nestedCallback: (r: string) => void; }; }
39+
40+
callback: (r) => {},
41+
>callback : (r: string) => void
42+
>(r) => {} : (r: string) => void
43+
>r : string
44+
45+
nested: {
46+
>nested : { nestedCallback: (r: string) => void; }
47+
>{ nestedCallback: (r) => {}, } : { nestedCallback: (r: string) => void; }
48+
49+
nestedCallback: (r) => {},
50+
>nestedCallback : (r: string) => void
51+
>(r) => {} : (r: string) => void
52+
>r : string
53+
54+
},
55+
});
56+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
// Repro from #52575
5+
6+
export interface Event<T> {
7+
callback: (response: T) => void;
8+
nested: {
9+
nestedCallback: (response: T) => void;
10+
}
11+
}
12+
13+
export type CustomEvents = {
14+
a: Event<string>
15+
b: Event<number>
16+
};
17+
18+
declare function emit<T extends keyof CustomEvents>(type: T, data: CustomEvents[T]): void
19+
20+
emit('a', {
21+
callback: (r) => {},
22+
nested: {
23+
nestedCallback: (r) => {},
24+
},
25+
});

0 commit comments

Comments
 (0)