diff --git a/src/runtime/internal/lifecycle.ts b/src/runtime/internal/lifecycle.ts index b188111ba28b..5d73021e5574 100644 --- a/src/runtime/internal/lifecycle.ts +++ b/src/runtime/internal/lifecycle.ts @@ -36,6 +36,8 @@ type ExtractObjectValues> = Object[keyof Object] type ConstructDispatchFunction, EventKey extends keyof EventMap> = EventMap[EventKey] extends never ? (type: EventKey) => void + : undefined extends EventMap[EventKey] + ? (type: EventKey, detail?: EventMap[EventKey]) => void : (type: EventKey, detail: EventMap[EventKey]) => void type CreateDispatchFunctionMap = { @@ -63,6 +65,30 @@ export function createEventDispatcher< }) as EventDispatcher; } + +const dispatch = createEventDispatcher<{ + loaded: never + change: string + valid: boolean +}>(); + +// @ts-expect-error +dispatch('some-event'); + +dispatch('loaded'); +// @ts-expect-error +dispatch('loaded', 123); + +dispatch('change', 'string'); +// @ts-expect-error +dispatch('change', 123); + +dispatch('valid', true); +// @ts-expect-error +dispatch('valid', 'string'); +dispatch('change', undefined); + + export function setContext(key, context: T) { get_current_component().$$.context.set(key, context); }