@@ -94,26 +94,29 @@ type UnpackPayload<F, S> = UnpackEffectPayload<F, S> extends never
94
94
: UnpackReducerPayload < F , S >
95
95
: UnpackEffectPayload < F , S >
96
96
97
- type PayloadMethodKeys < M , S > = {
98
- [ key in keyof M ] : UnpackPayload < M [ key ] , S > extends never ? never : key
99
- } [ keyof M ]
97
+ type PayloadMethodKeySet < M , S , SS extends keyof M > = {
98
+ [ key in SS ] : M [ key ] extends
99
+ | ( ( ) => Observable < EffectAction > )
100
+ | ( ( payload$ : Observable < any > ) => Observable < EffectAction > )
101
+ | ( ( payload$ : Observable < any > , state$ : Observable < S > ) => Observable < EffectAction > )
102
+ ? key
103
+ : M [ key ] extends ( ( ) => S ) | ( ( state : S ) => S ) | ( ( state : S , payload : any ) => S )
104
+ ? key
105
+ : M [ key ] extends ( ( state : Draft < S > ) => void ) | ( ( state : Draft < S > , payload : any ) => void )
106
+ ? key
107
+ : M [ key ] extends Observable < any >
108
+ ? key
109
+ : never
110
+ } [ SS ]
100
111
101
112
export type ActionMethodOfAyanami < M extends Ayanami < S > , S > = Pick <
102
- {
103
- [ key in keyof M ] : UnpackPayload < M [ key ] , S > extends never
104
- ? never
105
- : ActionMethod < UnpackPayload < M [ key ] , S > >
106
- } ,
107
- Exclude < PayloadMethodKeys < M , S > , keyof Ayanami < S > >
113
+ { [ key in keyof M ] : ActionMethod < UnpackPayload < M [ key ] , S > > } ,
114
+ PayloadMethodKeySet < M , S , Exclude < keyof M , keyof Ayanami < S > > >
108
115
>
109
116
110
117
export type ActionOfAyanami < M extends Ayanami < S > , S > = Pick <
111
- {
112
- [ key in keyof M ] : UnpackPayload < M [ key ] , S > extends never
113
- ? never
114
- : ActionMethod < UnpackPayload < M [ key ] , S > , EffectAction >
115
- } ,
116
- Exclude < PayloadMethodKeys < M , S > , keyof Ayanami < S > >
118
+ { [ key in keyof M ] : ActionMethod < UnpackPayload < M [ key ] , S > , EffectAction > } ,
119
+ PayloadMethodKeySet < M , S , Exclude < keyof M , keyof Ayanami < S > > >
117
120
>
118
121
119
122
export interface ObjectOf < T > {
0 commit comments