File tree Expand file tree Collapse file tree 2 files changed +21
-5
lines changed
packages/shared/createEventHook Expand file tree Collapse file tree 2 files changed +21
-5
lines changed Original file line number Diff line number Diff line change @@ -134,4 +134,20 @@ describe('createEventHook', () => {
134
134
off ( listener )
135
135
expect ( listener ) . toBeCalledTimes ( 1 )
136
136
} )
137
+
138
+ it ( 'multiple parameters on trigger with types' , ( ) => {
139
+ let id = ''
140
+ const list : unknown [ ] = [ ]
141
+ const { on : onResult , trigger } = createEventHook < string > ( )
142
+
143
+ onResult ( _id => id = _id )
144
+ onResult ( ( str , ...rest ) => {
145
+ list . push ( str , ...rest )
146
+ } )
147
+
148
+ trigger ( 'foo' , 1 , true , 'bar' )
149
+
150
+ expect ( id ) . toEqual ( 'foo' )
151
+ expect ( list ) . toEqual ( [ 'foo' , 1 , true , 'bar' ] )
152
+ } )
137
153
} )
Original file line number Diff line number Diff line change @@ -8,16 +8,16 @@ import { tryOnScopeDispose } from '../tryOnScopeDispose'
8
8
// any extends void = true
9
9
// so we need to check if T is any first
10
10
type Callback < T > = IsAny < T > extends true
11
- ? ( param : any ) => void
11
+ ? ( ... param : any ) => void
12
12
: (
13
13
[ T ] extends [ void ]
14
- ? ( ) => void
15
- : ( param : T ) => void
14
+ ? ( ... param : unknown [ ] ) => void
15
+ : ( ... param : [ T , ... unknown [ ] ] ) => void
16
16
)
17
17
18
18
export type EventHookOn < T = any > = ( fn : Callback < T > ) => { off : ( ) => void }
19
19
export type EventHookOff < T = any > = ( fn : Callback < T > ) => void
20
- export type EventHookTrigger < T = any > = ( param ?: T ) => Promise < unknown [ ] >
20
+ export type EventHookTrigger < T = any > = ( ... param : IsAny < T > extends true ? unknown [ ] : [ T , ... unknown [ ] ] ) => Promise < unknown [ ] >
21
21
22
22
export interface EventHook < T = any > {
23
23
on : EventHookOn < T >
@@ -49,7 +49,7 @@ export function createEventHook<T = any>(): EventHook<T> {
49
49
}
50
50
51
51
const trigger : EventHookTrigger < T > = ( ...args ) => {
52
- return Promise . all ( Array . from ( fns ) . map ( fn => fn ( ...( args as [ T ] ) ) ) )
52
+ return Promise . all ( Array . from ( fns ) . map ( fn => fn ( ...( args as [ T , ... unknown [ ] ] ) ) ) )
53
53
}
54
54
55
55
return {
You can’t perform that action at this time.
0 commit comments