Skip to content

Commit 3ef4cf8

Browse files
committed
add an extra test case
1 parent be61797 commit 3ef4cf8

File tree

3 files changed

+373
-0
lines changed

3 files changed

+373
-0
lines changed
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
//// [tests/cases/compiler/contextualInnerCallFromConditionalContextualType2.ts] ////
2+
3+
=== contextualInnerCallFromConditionalContextualType2.ts ===
4+
interface ActorImpl {
5+
>ActorImpl : Symbol(ActorImpl, Decl(contextualInnerCallFromConditionalContextualType2.ts, 0, 0))
6+
7+
src: string;
8+
>src : Symbol(ActorImpl.src, Decl(contextualInnerCallFromConditionalContextualType2.ts, 0, 21))
9+
10+
output: any;
11+
>output : Symbol(ActorImpl.output, Decl(contextualInnerCallFromConditionalContextualType2.ts, 1, 14))
12+
}
13+
14+
interface DoneInvokeEvent<TData> {
15+
>DoneInvokeEvent : Symbol(DoneInvokeEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 3, 1))
16+
>TData : Symbol(TData, Decl(contextualInnerCallFromConditionalContextualType2.ts, 5, 26))
17+
18+
type: `done.invoke.${string}`;
19+
>type : Symbol(DoneInvokeEvent.type, Decl(contextualInnerCallFromConditionalContextualType2.ts, 5, 34))
20+
21+
output: TData;
22+
>output : Symbol(DoneInvokeEvent.output, Decl(contextualInnerCallFromConditionalContextualType2.ts, 6, 32))
23+
>TData : Symbol(TData, Decl(contextualInnerCallFromConditionalContextualType2.ts, 5, 26))
24+
}
25+
26+
type AssignActionObject<TEvent extends { type: string }> = {
27+
>AssignActionObject : Symbol(AssignActionObject, Decl(contextualInnerCallFromConditionalContextualType2.ts, 8, 1))
28+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 10, 24))
29+
>type : Symbol(type, Decl(contextualInnerCallFromConditionalContextualType2.ts, 10, 40))
30+
31+
type: "xstate.assign";
32+
>type : Symbol(type, Decl(contextualInnerCallFromConditionalContextualType2.ts, 10, 60))
33+
34+
ev: TEvent;
35+
>ev : Symbol(ev, Decl(contextualInnerCallFromConditionalContextualType2.ts, 11, 24))
36+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 10, 24))
37+
38+
(ev: TEvent): void;
39+
>ev : Symbol(ev, Decl(contextualInnerCallFromConditionalContextualType2.ts, 13, 3))
40+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 10, 24))
41+
42+
};
43+
44+
type ActionFunction<TEvent extends { type: string }> = (ev: TEvent) => void;
45+
>ActionFunction : Symbol(ActionFunction, Decl(contextualInnerCallFromConditionalContextualType2.ts, 14, 2))
46+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 16, 20))
47+
>type : Symbol(type, Decl(contextualInnerCallFromConditionalContextualType2.ts, 16, 36))
48+
>ev : Symbol(ev, Decl(contextualInnerCallFromConditionalContextualType2.ts, 16, 56))
49+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 16, 20))
50+
51+
declare function assign<TEvent extends { type: string }>(
52+
>assign : Symbol(assign, Decl(contextualInnerCallFromConditionalContextualType2.ts, 16, 76))
53+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 18, 24))
54+
>type : Symbol(type, Decl(contextualInnerCallFromConditionalContextualType2.ts, 18, 40))
55+
56+
assigner: (ev: TEvent) => void
57+
>assigner : Symbol(assigner, Decl(contextualInnerCallFromConditionalContextualType2.ts, 18, 57))
58+
>ev : Symbol(ev, Decl(contextualInnerCallFromConditionalContextualType2.ts, 19, 13))
59+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 18, 24))
60+
61+
): AssignActionObject<TEvent>;
62+
>AssignActionObject : Symbol(AssignActionObject, Decl(contextualInnerCallFromConditionalContextualType2.ts, 8, 1))
63+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 18, 24))
64+
65+
type Action<TEvent extends { type: string }> =
66+
>Action : Symbol(Action, Decl(contextualInnerCallFromConditionalContextualType2.ts, 20, 30))
67+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 22, 12))
68+
>type : Symbol(type, Decl(contextualInnerCallFromConditionalContextualType2.ts, 22, 28))
69+
70+
| AssignActionObject<TEvent>
71+
>AssignActionObject : Symbol(AssignActionObject, Decl(contextualInnerCallFromConditionalContextualType2.ts, 8, 1))
72+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 22, 12))
73+
74+
| ActionFunction<TEvent>;
75+
>ActionFunction : Symbol(ActionFunction, Decl(contextualInnerCallFromConditionalContextualType2.ts, 14, 2))
76+
>TEvent : Symbol(TEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 22, 12))
77+
78+
declare function createMachine<TActors extends ActorImpl>(config: {
79+
>createMachine : Symbol(createMachine, Decl(contextualInnerCallFromConditionalContextualType2.ts, 24, 27))
80+
>TActors : Symbol(TActors, Decl(contextualInnerCallFromConditionalContextualType2.ts, 26, 31))
81+
>ActorImpl : Symbol(ActorImpl, Decl(contextualInnerCallFromConditionalContextualType2.ts, 0, 0))
82+
>config : Symbol(config, Decl(contextualInnerCallFromConditionalContextualType2.ts, 26, 58))
83+
84+
types: {
85+
>types : Symbol(types, Decl(contextualInnerCallFromConditionalContextualType2.ts, 26, 67))
86+
87+
actors: TActors;
88+
>actors : Symbol(actors, Decl(contextualInnerCallFromConditionalContextualType2.ts, 27, 10))
89+
>TActors : Symbol(TActors, Decl(contextualInnerCallFromConditionalContextualType2.ts, 26, 31))
90+
91+
};
92+
states: Record<
93+
>states : Symbol(states, Decl(contextualInnerCallFromConditionalContextualType2.ts, 29, 4))
94+
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
95+
96+
string,
97+
{
98+
invoke: TActors extends { src: infer TSrc }
99+
>invoke : Symbol(invoke, Decl(contextualInnerCallFromConditionalContextualType2.ts, 32, 5))
100+
>TActors : Symbol(TActors, Decl(contextualInnerCallFromConditionalContextualType2.ts, 26, 31))
101+
>src : Symbol(src, Decl(contextualInnerCallFromConditionalContextualType2.ts, 33, 31))
102+
>TSrc : Symbol(TSrc, Decl(contextualInnerCallFromConditionalContextualType2.ts, 33, 42))
103+
104+
? {
105+
src: TSrc;
106+
>src : Symbol(src, Decl(contextualInnerCallFromConditionalContextualType2.ts, 34, 11))
107+
>TSrc : Symbol(TSrc, Decl(contextualInnerCallFromConditionalContextualType2.ts, 33, 42))
108+
109+
onDone: Action<DoneInvokeEvent<TActors["output"]>>;
110+
>onDone : Symbol(onDone, Decl(contextualInnerCallFromConditionalContextualType2.ts, 35, 22))
111+
>Action : Symbol(Action, Decl(contextualInnerCallFromConditionalContextualType2.ts, 20, 30))
112+
>DoneInvokeEvent : Symbol(DoneInvokeEvent, Decl(contextualInnerCallFromConditionalContextualType2.ts, 3, 1))
113+
>TActors : Symbol(TActors, Decl(contextualInnerCallFromConditionalContextualType2.ts, 26, 31))
114+
}
115+
: never;
116+
}
117+
>;
118+
}): void;
119+
120+
createMachine({
121+
>createMachine : Symbol(createMachine, Decl(contextualInnerCallFromConditionalContextualType2.ts, 24, 27))
122+
123+
types: {
124+
>types : Symbol(types, Decl(contextualInnerCallFromConditionalContextualType2.ts, 43, 15))
125+
126+
actors: {} as {
127+
>actors : Symbol(actors, Decl(contextualInnerCallFromConditionalContextualType2.ts, 44, 10))
128+
129+
src: "getRandomNumber";
130+
>src : Symbol(src, Decl(contextualInnerCallFromConditionalContextualType2.ts, 45, 19))
131+
132+
output: { result: number };
133+
>output : Symbol(output, Decl(contextualInnerCallFromConditionalContextualType2.ts, 46, 29))
134+
>result : Symbol(result, Decl(contextualInnerCallFromConditionalContextualType2.ts, 47, 15))
135+
136+
},
137+
},
138+
states: {
139+
>states : Symbol(states, Decl(contextualInnerCallFromConditionalContextualType2.ts, 49, 4))
140+
141+
a: {
142+
>a : Symbol(a, Decl(contextualInnerCallFromConditionalContextualType2.ts, 50, 11))
143+
144+
invoke: {
145+
>invoke : Symbol(invoke, Decl(contextualInnerCallFromConditionalContextualType2.ts, 51, 8))
146+
147+
src: "getRandomNumber",
148+
>src : Symbol(src, Decl(contextualInnerCallFromConditionalContextualType2.ts, 52, 15))
149+
150+
onDone: assign((event) => {
151+
>onDone : Symbol(onDone, Decl(contextualInnerCallFromConditionalContextualType2.ts, 53, 31))
152+
>assign : Symbol(assign, Decl(contextualInnerCallFromConditionalContextualType2.ts, 16, 76))
153+
>event : Symbol(event, Decl(contextualInnerCallFromConditionalContextualType2.ts, 54, 24))
154+
155+
event;
156+
>event : Symbol(event, Decl(contextualInnerCallFromConditionalContextualType2.ts, 54, 24))
157+
158+
// ^?
159+
}),
160+
},
161+
},
162+
},
163+
});
164+
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
//// [tests/cases/compiler/contextualInnerCallFromConditionalContextualType2.ts] ////
2+
3+
=== contextualInnerCallFromConditionalContextualType2.ts ===
4+
interface ActorImpl {
5+
src: string;
6+
>src : string
7+
8+
output: any;
9+
>output : any
10+
}
11+
12+
interface DoneInvokeEvent<TData> {
13+
type: `done.invoke.${string}`;
14+
>type : `done.invoke.${string}`
15+
16+
output: TData;
17+
>output : TData
18+
}
19+
20+
type AssignActionObject<TEvent extends { type: string }> = {
21+
>AssignActionObject : AssignActionObject<TEvent>
22+
>type : string
23+
24+
type: "xstate.assign";
25+
>type : "xstate.assign"
26+
27+
ev: TEvent;
28+
>ev : TEvent
29+
30+
(ev: TEvent): void;
31+
>ev : TEvent
32+
33+
};
34+
35+
type ActionFunction<TEvent extends { type: string }> = (ev: TEvent) => void;
36+
>ActionFunction : ActionFunction<TEvent>
37+
>type : string
38+
>ev : TEvent
39+
40+
declare function assign<TEvent extends { type: string }>(
41+
>assign : <TEvent extends { type: string; }>(assigner: (ev: TEvent) => void) => AssignActionObject<TEvent>
42+
>type : string
43+
44+
assigner: (ev: TEvent) => void
45+
>assigner : (ev: TEvent) => void
46+
>ev : TEvent
47+
48+
): AssignActionObject<TEvent>;
49+
50+
type Action<TEvent extends { type: string }> =
51+
>Action : Action<TEvent>
52+
>type : string
53+
54+
| AssignActionObject<TEvent>
55+
| ActionFunction<TEvent>;
56+
57+
declare function createMachine<TActors extends ActorImpl>(config: {
58+
>createMachine : <TActors extends ActorImpl>(config: { types: { actors: TActors;}; states: Record<string, { invoke: TActors extends { src: infer TSrc; } ? { src: TSrc; onDone: Action<DoneInvokeEvent<TActors["output"]>>; } : never; }>; }) => void
59+
>config : { types: { actors: TActors;}; states: Record<string, { invoke: TActors extends { src: infer TSrc; } ? { src: TSrc; onDone: Action<DoneInvokeEvent<TActors["output"]>>; } : never; }>; }
60+
61+
types: {
62+
>types : { actors: TActors; }
63+
64+
actors: TActors;
65+
>actors : TActors
66+
67+
};
68+
states: Record<
69+
>states : Record<string, { invoke: TActors extends { src: infer TSrc; } ? { src: TSrc; onDone: Action<DoneInvokeEvent<TActors["output"]>>; } : never; }>
70+
71+
string,
72+
{
73+
invoke: TActors extends { src: infer TSrc }
74+
>invoke : TActors extends { src: infer TSrc; } ? { src: TSrc; onDone: Action<DoneInvokeEvent<TActors["output"]>>; } : never
75+
>src : TSrc
76+
77+
? {
78+
src: TSrc;
79+
>src : TSrc
80+
81+
onDone: Action<DoneInvokeEvent<TActors["output"]>>;
82+
>onDone : Action<DoneInvokeEvent<TActors["output"]>>
83+
}
84+
: never;
85+
}
86+
>;
87+
}): void;
88+
89+
createMachine({
90+
>createMachine({ types: { actors: {} as { src: "getRandomNumber"; output: { result: number }; }, }, states: { a: { invoke: { src: "getRandomNumber", onDone: assign((event) => { event; // ^? }), }, }, },}) : void
91+
>createMachine : <TActors extends ActorImpl>(config: { types: { actors: TActors; }; states: Record<string, { invoke: TActors extends { src: infer TSrc; } ? { src: TSrc; onDone: Action<DoneInvokeEvent<TActors["output"]>>; } : never; }>; }) => void
92+
>{ types: { actors: {} as { src: "getRandomNumber"; output: { result: number }; }, }, states: { a: { invoke: { src: "getRandomNumber", onDone: assign((event) => { event; // ^? }), }, }, },} : { types: { actors: { src: "getRandomNumber"; output: { result: number;}; }; }; states: { a: { invoke: { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }; }; }; }
93+
94+
types: {
95+
>types : { actors: { src: "getRandomNumber"; output: { result: number;}; }; }
96+
>{ actors: {} as { src: "getRandomNumber"; output: { result: number }; }, } : { actors: { src: "getRandomNumber"; output: { result: number;}; }; }
97+
98+
actors: {} as {
99+
>actors : { src: "getRandomNumber"; output: { result: number;}; }
100+
>{} as { src: "getRandomNumber"; output: { result: number }; } : { src: "getRandomNumber"; output: { result: number;}; }
101+
>{} : {}
102+
103+
src: "getRandomNumber";
104+
>src : "getRandomNumber"
105+
106+
output: { result: number };
107+
>output : { result: number; }
108+
>result : number
109+
110+
},
111+
},
112+
states: {
113+
>states : { a: { invoke: { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }; }; }
114+
>{ a: { invoke: { src: "getRandomNumber", onDone: assign((event) => { event; // ^? }), }, }, } : { a: { invoke: { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }; }; }
115+
116+
a: {
117+
>a : { invoke: { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }; }
118+
>{ invoke: { src: "getRandomNumber", onDone: assign((event) => { event; // ^? }), }, } : { invoke: { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }; }
119+
120+
invoke: {
121+
>invoke : { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }
122+
>{ src: "getRandomNumber", onDone: assign((event) => { event; // ^? }), } : { src: "getRandomNumber"; onDone: AssignActionObject<DoneInvokeEvent<{ result: number; }>>; }
123+
124+
src: "getRandomNumber",
125+
>src : "getRandomNumber"
126+
>"getRandomNumber" : "getRandomNumber"
127+
128+
onDone: assign((event) => {
129+
>onDone : AssignActionObject<DoneInvokeEvent<{ result: number; }>>
130+
>assign((event) => { event; // ^? }) : AssignActionObject<DoneInvokeEvent<{ result: number; }>>
131+
>assign : <TEvent extends { type: string; }>(assigner: (ev: TEvent) => void) => AssignActionObject<TEvent>
132+
>(event) => { event; // ^? } : (event: DoneInvokeEvent<{ result: number; }>) => void
133+
>event : DoneInvokeEvent<{ result: number; }>
134+
135+
event;
136+
>event : DoneInvokeEvent<{ result: number; }>
137+
138+
// ^?
139+
}),
140+
},
141+
},
142+
},
143+
});
144+
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
interface ActorImpl {
5+
src: string;
6+
output: any;
7+
}
8+
9+
interface DoneInvokeEvent<TData> {
10+
type: `done.invoke.${string}`;
11+
output: TData;
12+
}
13+
14+
type AssignActionObject<TEvent extends { type: string }> = {
15+
type: "xstate.assign";
16+
ev: TEvent;
17+
(ev: TEvent): void;
18+
};
19+
20+
type ActionFunction<TEvent extends { type: string }> = (ev: TEvent) => void;
21+
22+
declare function assign<TEvent extends { type: string }>(
23+
assigner: (ev: TEvent) => void
24+
): AssignActionObject<TEvent>;
25+
26+
type Action<TEvent extends { type: string }> =
27+
| AssignActionObject<TEvent>
28+
| ActionFunction<TEvent>;
29+
30+
declare function createMachine<TActors extends ActorImpl>(config: {
31+
types: {
32+
actors: TActors;
33+
};
34+
states: Record<
35+
string,
36+
{
37+
invoke: TActors extends { src: infer TSrc }
38+
? {
39+
src: TSrc;
40+
onDone: Action<DoneInvokeEvent<TActors["output"]>>;
41+
}
42+
: never;
43+
}
44+
>;
45+
}): void;
46+
47+
createMachine({
48+
types: {
49+
actors: {} as {
50+
src: "getRandomNumber";
51+
output: { result: number };
52+
},
53+
},
54+
states: {
55+
a: {
56+
invoke: {
57+
src: "getRandomNumber",
58+
onDone: assign((event) => {
59+
event;
60+
// ^?
61+
}),
62+
},
63+
},
64+
},
65+
});

0 commit comments

Comments
 (0)