@@ -36,6 +36,8 @@ type ExtractObjectValues<Object extends Record<any, any>> = Object[keyof Object]
36
36
type ConstructDispatchFunction < EventMap extends Record < string , any > , EventKey extends keyof EventMap > =
37
37
EventMap [ EventKey ] extends never
38
38
? ( type : EventKey ) => void
39
+ : undefined extends EventMap [ EventKey ]
40
+ ? ( type : EventKey , detail ?: EventMap [ EventKey ] ) => void
39
41
: ( type : EventKey , detail : EventMap [ EventKey ] ) => void
40
42
41
43
type CreateDispatchFunctionMap < EventMap > = {
@@ -63,6 +65,30 @@ export function createEventDispatcher<
63
65
} ) as EventDispatcher < EventMap > ;
64
66
}
65
67
68
+
69
+ const dispatch = createEventDispatcher < {
70
+ loaded : never
71
+ change : string
72
+ valid : boolean
73
+ } > ( ) ;
74
+
75
+ // @ts -expect-error
76
+ dispatch ( 'some-event' ) ;
77
+
78
+ dispatch ( 'loaded' ) ;
79
+ // @ts -expect-error
80
+ dispatch ( 'loaded' , 123 ) ;
81
+
82
+ dispatch ( 'change' , 'string' ) ;
83
+ // @ts -expect-error
84
+ dispatch ( 'change' , 123 ) ;
85
+
86
+ dispatch ( 'valid' , true ) ;
87
+ // @ts -expect-error
88
+ dispatch ( 'valid' , 'string' ) ;
89
+ dispatch ( 'change' , undefined ) ;
90
+
91
+
66
92
export function setContext < T > ( key , context : T ) {
67
93
get_current_component ( ) . $$ . context . set ( key , context ) ;
68
94
}
0 commit comments