@@ -36,6 +36,8 @@ type ExtractObjectValues<Object extends Record<any, any>> = Object[keyof Object]
3636type ConstructDispatchFunction < EventMap extends Record < string , any > , EventKey extends keyof EventMap > =
3737 EventMap [ EventKey ] extends never
3838 ? ( type : EventKey ) => void
39+ : undefined extends EventMap [ EventKey ]
40+ ? ( type : EventKey , detail ?: EventMap [ EventKey ] ) => void
3941 : ( type : EventKey , detail : EventMap [ EventKey ] ) => void
4042
4143type CreateDispatchFunctionMap < EventMap > = {
@@ -63,6 +65,30 @@ export function createEventDispatcher<
6365 } ) as EventDispatcher < EventMap > ;
6466}
6567
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+
6692export function setContext < T > ( key , context : T ) {
6793 get_current_component ( ) . $$ . context . set ( key , context ) ;
6894}
0 commit comments