Skip to content

Commit d5ccec3

Browse files
authored
Add tests for inferring contextual generic mapped types (#52709)
1 parent b19cfc0 commit d5ccec3

File tree

6 files changed

+512
-0
lines changed

6 files changed

+512
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
=== tests/cases/conformance/types/typeRelationships/typeInference/genericContextualTypes2.ts ===
2+
type LowInfer<T> = T & {};
3+
>LowInfer : Symbol(LowInfer, Decl(genericContextualTypes2.ts, 0, 0))
4+
>T : Symbol(T, Decl(genericContextualTypes2.ts, 0, 14))
5+
>T : Symbol(T, Decl(genericContextualTypes2.ts, 0, 14))
6+
7+
type PartialAssigner<TContext, TKey extends keyof TContext> = (
8+
>PartialAssigner : Symbol(PartialAssigner, Decl(genericContextualTypes2.ts, 0, 26))
9+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 2, 21))
10+
>TKey : Symbol(TKey, Decl(genericContextualTypes2.ts, 2, 30))
11+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 2, 21))
12+
13+
context: TContext
14+
>context : Symbol(context, Decl(genericContextualTypes2.ts, 2, 63))
15+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 2, 21))
16+
17+
) => TContext[TKey];
18+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 2, 21))
19+
>TKey : Symbol(TKey, Decl(genericContextualTypes2.ts, 2, 30))
20+
21+
type PropertyAssigner<TContext> = {
22+
>PropertyAssigner : Symbol(PropertyAssigner, Decl(genericContextualTypes2.ts, 4, 20))
23+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 6, 22))
24+
25+
[K in keyof TContext]?: PartialAssigner<TContext, K> | TContext[K];
26+
>K : Symbol(K, Decl(genericContextualTypes2.ts, 7, 3))
27+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 6, 22))
28+
>PartialAssigner : Symbol(PartialAssigner, Decl(genericContextualTypes2.ts, 0, 26))
29+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 6, 22))
30+
>K : Symbol(K, Decl(genericContextualTypes2.ts, 7, 3))
31+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 6, 22))
32+
>K : Symbol(K, Decl(genericContextualTypes2.ts, 7, 3))
33+
34+
};
35+
36+
type Meta<TContext> = {
37+
>Meta : Symbol(Meta, Decl(genericContextualTypes2.ts, 8, 2))
38+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 10, 10))
39+
40+
action: (ctx: TContext) => void
41+
>action : Symbol(action, Decl(genericContextualTypes2.ts, 10, 23))
42+
>ctx : Symbol(ctx, Decl(genericContextualTypes2.ts, 11, 11))
43+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 10, 10))
44+
}
45+
46+
interface AssignAction<TContext> {
47+
>AssignAction : Symbol(AssignAction, Decl(genericContextualTypes2.ts, 12, 1))
48+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 14, 23))
49+
50+
type: "xstate.assign";
51+
>type : Symbol(AssignAction.type, Decl(genericContextualTypes2.ts, 14, 34))
52+
53+
exec: (arg: TContext, meta: Meta<TContext>) => void;
54+
>exec : Symbol(AssignAction.exec, Decl(genericContextualTypes2.ts, 15, 24))
55+
>arg : Symbol(arg, Decl(genericContextualTypes2.ts, 16, 9))
56+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 14, 23))
57+
>meta : Symbol(meta, Decl(genericContextualTypes2.ts, 16, 23))
58+
>Meta : Symbol(Meta, Decl(genericContextualTypes2.ts, 8, 2))
59+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 14, 23))
60+
}
61+
62+
declare function assign<TContext>(
63+
>assign : Symbol(assign, Decl(genericContextualTypes2.ts, 17, 1))
64+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 19, 24))
65+
66+
assignment: PropertyAssigner<LowInfer<TContext>>
67+
>assignment : Symbol(assignment, Decl(genericContextualTypes2.ts, 19, 34))
68+
>PropertyAssigner : Symbol(PropertyAssigner, Decl(genericContextualTypes2.ts, 4, 20))
69+
>LowInfer : Symbol(LowInfer, Decl(genericContextualTypes2.ts, 0, 0))
70+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 19, 24))
71+
72+
): AssignAction<TContext>;
73+
>AssignAction : Symbol(AssignAction, Decl(genericContextualTypes2.ts, 12, 1))
74+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 19, 24))
75+
76+
type Config<TContext> = {
77+
>Config : Symbol(Config, Decl(genericContextualTypes2.ts, 21, 26))
78+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 23, 12))
79+
80+
context: TContext;
81+
>context : Symbol(context, Decl(genericContextualTypes2.ts, 23, 25))
82+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 23, 12))
83+
84+
entry?: AssignAction<TContext>;
85+
>entry : Symbol(entry, Decl(genericContextualTypes2.ts, 24, 20))
86+
>AssignAction : Symbol(AssignAction, Decl(genericContextualTypes2.ts, 12, 1))
87+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 23, 12))
88+
89+
};
90+
91+
declare function createMachine<TContext>(config: Config<TContext>): void;
92+
>createMachine : Symbol(createMachine, Decl(genericContextualTypes2.ts, 26, 2))
93+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 28, 31))
94+
>config : Symbol(config, Decl(genericContextualTypes2.ts, 28, 41))
95+
>Config : Symbol(Config, Decl(genericContextualTypes2.ts, 21, 26))
96+
>TContext : Symbol(TContext, Decl(genericContextualTypes2.ts, 28, 31))
97+
98+
createMachine<{ count: number }>({
99+
>createMachine : Symbol(createMachine, Decl(genericContextualTypes2.ts, 26, 2))
100+
>count : Symbol(count, Decl(genericContextualTypes2.ts, 30, 15))
101+
102+
context: {
103+
>context : Symbol(context, Decl(genericContextualTypes2.ts, 30, 34))
104+
105+
count: 0,
106+
>count : Symbol(count, Decl(genericContextualTypes2.ts, 31, 12))
107+
108+
},
109+
entry: assign({
110+
>entry : Symbol(entry, Decl(genericContextualTypes2.ts, 33, 4))
111+
>assign : Symbol(assign, Decl(genericContextualTypes2.ts, 17, 1))
112+
113+
count: (ctx: { count: number }) => ++ctx.count,
114+
>count : Symbol(count, Decl(genericContextualTypes2.ts, 34, 17))
115+
>ctx : Symbol(ctx, Decl(genericContextualTypes2.ts, 35, 12))
116+
>count : Symbol(count, Decl(genericContextualTypes2.ts, 35, 18))
117+
>ctx.count : Symbol(count, Decl(genericContextualTypes2.ts, 35, 18))
118+
>ctx : Symbol(ctx, Decl(genericContextualTypes2.ts, 35, 12))
119+
>count : Symbol(count, Decl(genericContextualTypes2.ts, 35, 18))
120+
121+
}),
122+
});
123+
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
=== tests/cases/conformance/types/typeRelationships/typeInference/genericContextualTypes2.ts ===
2+
type LowInfer<T> = T & {};
3+
>LowInfer : LowInfer<T>
4+
5+
type PartialAssigner<TContext, TKey extends keyof TContext> = (
6+
>PartialAssigner : PartialAssigner<TContext, TKey>
7+
8+
context: TContext
9+
>context : TContext
10+
11+
) => TContext[TKey];
12+
13+
type PropertyAssigner<TContext> = {
14+
>PropertyAssigner : PropertyAssigner<TContext>
15+
16+
[K in keyof TContext]?: PartialAssigner<TContext, K> | TContext[K];
17+
};
18+
19+
type Meta<TContext> = {
20+
>Meta : Meta<TContext>
21+
22+
action: (ctx: TContext) => void
23+
>action : (ctx: TContext) => void
24+
>ctx : TContext
25+
}
26+
27+
interface AssignAction<TContext> {
28+
type: "xstate.assign";
29+
>type : "xstate.assign"
30+
31+
exec: (arg: TContext, meta: Meta<TContext>) => void;
32+
>exec : (arg: TContext, meta: Meta<TContext>) => void
33+
>arg : TContext
34+
>meta : Meta<TContext>
35+
}
36+
37+
declare function assign<TContext>(
38+
>assign : <TContext>(assignment: PropertyAssigner<LowInfer<TContext>>) => AssignAction<TContext>
39+
40+
assignment: PropertyAssigner<LowInfer<TContext>>
41+
>assignment : PropertyAssigner<LowInfer<TContext>>
42+
43+
): AssignAction<TContext>;
44+
45+
type Config<TContext> = {
46+
>Config : Config<TContext>
47+
48+
context: TContext;
49+
>context : TContext
50+
51+
entry?: AssignAction<TContext>;
52+
>entry : AssignAction<TContext> | undefined
53+
54+
};
55+
56+
declare function createMachine<TContext>(config: Config<TContext>): void;
57+
>createMachine : <TContext>(config: Config<TContext>) => void
58+
>config : Config<TContext>
59+
60+
createMachine<{ count: number }>({
61+
>createMachine<{ count: number }>({ context: { count: 0, }, entry: assign({ count: (ctx: { count: number }) => ++ctx.count, }),}) : void
62+
>createMachine : <TContext>(config: Config<TContext>) => void
63+
>count : number
64+
>{ context: { count: 0, }, entry: assign({ count: (ctx: { count: number }) => ++ctx.count, }),} : { context: { count: number; }; entry: AssignAction<{ count: number; }>; }
65+
66+
context: {
67+
>context : { count: number; }
68+
>{ count: 0, } : { count: number; }
69+
70+
count: 0,
71+
>count : number
72+
>0 : 0
73+
74+
},
75+
entry: assign({
76+
>entry : AssignAction<{ count: number; }>
77+
>assign({ count: (ctx: { count: number }) => ++ctx.count, }) : AssignAction<{ count: number; }>
78+
>assign : <TContext>(assignment: PropertyAssigner<LowInfer<TContext>>) => AssignAction<TContext>
79+
>{ count: (ctx: { count: number }) => ++ctx.count, } : { count: (ctx: { count: number;}) => number; }
80+
81+
count: (ctx: { count: number }) => ++ctx.count,
82+
>count : (ctx: { count: number;}) => number
83+
>(ctx: { count: number }) => ++ctx.count : (ctx: { count: number;}) => number
84+
>ctx : { count: number; }
85+
>count : number
86+
>++ctx.count : number
87+
>ctx.count : number
88+
>ctx : { count: number; }
89+
>count : number
90+
91+
}),
92+
});
93+
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
=== tests/cases/conformance/types/typeRelationships/typeInference/genericContextualTypes3.ts ===
2+
type LowInfer<T> = T & {};
3+
>LowInfer : Symbol(LowInfer, Decl(genericContextualTypes3.ts, 0, 0))
4+
>T : Symbol(T, Decl(genericContextualTypes3.ts, 0, 14))
5+
>T : Symbol(T, Decl(genericContextualTypes3.ts, 0, 14))
6+
7+
type PartialAssigner<TContext, TKey extends keyof TContext> = (
8+
>PartialAssigner : Symbol(PartialAssigner, Decl(genericContextualTypes3.ts, 0, 26))
9+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 2, 21))
10+
>TKey : Symbol(TKey, Decl(genericContextualTypes3.ts, 2, 30))
11+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 2, 21))
12+
13+
context: TContext
14+
>context : Symbol(context, Decl(genericContextualTypes3.ts, 2, 63))
15+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 2, 21))
16+
17+
) => TContext[TKey];
18+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 2, 21))
19+
>TKey : Symbol(TKey, Decl(genericContextualTypes3.ts, 2, 30))
20+
21+
type PropertyAssigner<TContext> = {
22+
>PropertyAssigner : Symbol(PropertyAssigner, Decl(genericContextualTypes3.ts, 4, 20))
23+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 6, 22))
24+
25+
[K in keyof TContext]?: PartialAssigner<TContext, K> | TContext[K];
26+
>K : Symbol(K, Decl(genericContextualTypes3.ts, 7, 3))
27+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 6, 22))
28+
>PartialAssigner : Symbol(PartialAssigner, Decl(genericContextualTypes3.ts, 0, 26))
29+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 6, 22))
30+
>K : Symbol(K, Decl(genericContextualTypes3.ts, 7, 3))
31+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 6, 22))
32+
>K : Symbol(K, Decl(genericContextualTypes3.ts, 7, 3))
33+
34+
};
35+
36+
type Meta<TContext> = {
37+
>Meta : Symbol(Meta, Decl(genericContextualTypes3.ts, 8, 2))
38+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 10, 10))
39+
40+
action: (ctx: TContext) => void
41+
>action : Symbol(action, Decl(genericContextualTypes3.ts, 10, 23))
42+
>ctx : Symbol(ctx, Decl(genericContextualTypes3.ts, 11, 11))
43+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 10, 10))
44+
}
45+
46+
interface AssignAction<TContext> {
47+
>AssignAction : Symbol(AssignAction, Decl(genericContextualTypes3.ts, 12, 1))
48+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 14, 23))
49+
50+
type: "xstate.assign";
51+
>type : Symbol(AssignAction.type, Decl(genericContextualTypes3.ts, 14, 34))
52+
53+
(arg: TContext, meta: Meta<TContext>): void;
54+
>arg : Symbol(arg, Decl(genericContextualTypes3.ts, 16, 3))
55+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 14, 23))
56+
>meta : Symbol(meta, Decl(genericContextualTypes3.ts, 16, 17))
57+
>Meta : Symbol(Meta, Decl(genericContextualTypes3.ts, 8, 2))
58+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 14, 23))
59+
}
60+
61+
declare function assign<TContext>(
62+
>assign : Symbol(assign, Decl(genericContextualTypes3.ts, 17, 1))
63+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 19, 24))
64+
65+
assignment: PropertyAssigner<LowInfer<TContext>>
66+
>assignment : Symbol(assignment, Decl(genericContextualTypes3.ts, 19, 34))
67+
>PropertyAssigner : Symbol(PropertyAssigner, Decl(genericContextualTypes3.ts, 4, 20))
68+
>LowInfer : Symbol(LowInfer, Decl(genericContextualTypes3.ts, 0, 0))
69+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 19, 24))
70+
71+
): AssignAction<TContext>;
72+
>AssignAction : Symbol(AssignAction, Decl(genericContextualTypes3.ts, 12, 1))
73+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 19, 24))
74+
75+
type Config<TContext> = {
76+
>Config : Symbol(Config, Decl(genericContextualTypes3.ts, 21, 26))
77+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 23, 12))
78+
79+
context: TContext;
80+
>context : Symbol(context, Decl(genericContextualTypes3.ts, 23, 25))
81+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 23, 12))
82+
83+
entry?: AssignAction<TContext>;
84+
>entry : Symbol(entry, Decl(genericContextualTypes3.ts, 24, 20))
85+
>AssignAction : Symbol(AssignAction, Decl(genericContextualTypes3.ts, 12, 1))
86+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 23, 12))
87+
88+
};
89+
90+
declare function createMachine<TContext>(config: Config<TContext>): void;
91+
>createMachine : Symbol(createMachine, Decl(genericContextualTypes3.ts, 26, 2))
92+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 28, 31))
93+
>config : Symbol(config, Decl(genericContextualTypes3.ts, 28, 41))
94+
>Config : Symbol(Config, Decl(genericContextualTypes3.ts, 21, 26))
95+
>TContext : Symbol(TContext, Decl(genericContextualTypes3.ts, 28, 31))
96+
97+
createMachine<{ count: number }>({
98+
>createMachine : Symbol(createMachine, Decl(genericContextualTypes3.ts, 26, 2))
99+
>count : Symbol(count, Decl(genericContextualTypes3.ts, 30, 15))
100+
101+
context: {
102+
>context : Symbol(context, Decl(genericContextualTypes3.ts, 30, 34))
103+
104+
count: 0,
105+
>count : Symbol(count, Decl(genericContextualTypes3.ts, 31, 12))
106+
107+
},
108+
entry: assign({
109+
>entry : Symbol(entry, Decl(genericContextualTypes3.ts, 33, 4))
110+
>assign : Symbol(assign, Decl(genericContextualTypes3.ts, 17, 1))
111+
112+
count: (ctx: { count: number }) => ++ctx.count,
113+
>count : Symbol(count, Decl(genericContextualTypes3.ts, 34, 17))
114+
>ctx : Symbol(ctx, Decl(genericContextualTypes3.ts, 35, 12))
115+
>count : Symbol(count, Decl(genericContextualTypes3.ts, 35, 18))
116+
>ctx.count : Symbol(count, Decl(genericContextualTypes3.ts, 35, 18))
117+
>ctx : Symbol(ctx, Decl(genericContextualTypes3.ts, 35, 12))
118+
>count : Symbol(count, Decl(genericContextualTypes3.ts, 35, 18))
119+
120+
}),
121+
});
122+

0 commit comments

Comments
 (0)