From 6d3bd0538fd97ca38c97abcc1b75dfe2dd43bc7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Jel=C3=ADnek?= Date: Tue, 16 Dec 2025 23:15:56 +0100 Subject: [PATCH 1/5] feat: type `currentTarget` in `on` function --- .changeset/bumpy-radios-live.md | 5 +++++ packages/svelte/src/events/public.d.ts | 5 ++++- packages/svelte/tests/types/events.ts | 2 ++ packages/svelte/types/index.d.ts | 5 ++++- 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 .changeset/bumpy-radios-live.md diff --git a/.changeset/bumpy-radios-live.md b/.changeset/bumpy-radios-live.md new file mode 100644 index 000000000000..15422a54d6fe --- /dev/null +++ b/.changeset/bumpy-radios-live.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +type `currentTarget` in `on` function diff --git a/packages/svelte/src/events/public.d.ts b/packages/svelte/src/events/public.d.ts index ff42e523b3e1..96adb2a58437 100644 --- a/packages/svelte/src/events/public.d.ts +++ b/packages/svelte/src/events/public.d.ts @@ -30,7 +30,10 @@ export function on( export function on( element: Element, type: Type, - handler: (this: Element, event: HTMLElementEventMap[Type]) => any, + handler: ( + this: Element, + event: HTMLElementEventMap[Type] & { currentTarget: EventTarget & Element } + ) => any, options?: AddEventListenerOptions | undefined ): () => void; /** diff --git a/packages/svelte/tests/types/events.ts b/packages/svelte/tests/types/events.ts index 77891952bef4..d8f31e2af8c1 100644 --- a/packages/svelte/tests/types/events.ts +++ b/packages/svelte/tests/types/events.ts @@ -8,6 +8,8 @@ on(window, 'click', (e) => e.button); on(document, 'click', (e) => e.button); +on(document.createElement('input'), 'input', (e) => e.currentTarget?.value); + on( document.body, 'clidck', diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 9ace341e1609..2eb243aca170 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -2823,7 +2823,10 @@ declare module 'svelte/events' { export function on( element: Element, type: Type, - handler: (this: Element, event: HTMLElementEventMap[Type]) => any, + handler: ( + this: Element, + event: HTMLElementEventMap[Type] & { currentTarget: EventTarget & Element } + ) => any, options?: AddEventListenerOptions | undefined ): () => void; /** From be6e664f9b8dbdc9600af615b26ec3d69da0be76 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 22 Dec 2025 14:02:51 -0500 Subject: [PATCH 2/5] `EventTarget &` is redundant, `Element` already extends `EventTarget` --- packages/svelte/src/events/public.d.ts | 5 +---- packages/svelte/types/index.d.ts | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/svelte/src/events/public.d.ts b/packages/svelte/src/events/public.d.ts index 96adb2a58437..e6cbaefced98 100644 --- a/packages/svelte/src/events/public.d.ts +++ b/packages/svelte/src/events/public.d.ts @@ -30,10 +30,7 @@ export function on( export function on( element: Element, type: Type, - handler: ( - this: Element, - event: HTMLElementEventMap[Type] & { currentTarget: EventTarget & Element } - ) => any, + handler: (this: Element, event: HTMLElementEventMap[Type] & { currentTarget: Element }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 2eb243aca170..2bc925f84247 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -2823,10 +2823,7 @@ declare module 'svelte/events' { export function on( element: Element, type: Type, - handler: ( - this: Element, - event: HTMLElementEventMap[Type] & { currentTarget: EventTarget & Element } - ) => any, + handler: (this: Element, event: HTMLElementEventMap[Type] & { currentTarget: Element }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** From bebdb84d94ff0b3f0d3f4abeafd4502f03756f7d Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 22 Dec 2025 14:03:24 -0500 Subject: [PATCH 3/5] no need for optional chaining --- packages/svelte/tests/types/events.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/tests/types/events.ts b/packages/svelte/tests/types/events.ts index d8f31e2af8c1..a334cb54930e 100644 --- a/packages/svelte/tests/types/events.ts +++ b/packages/svelte/tests/types/events.ts @@ -8,7 +8,7 @@ on(window, 'click', (e) => e.button); on(document, 'click', (e) => e.button); -on(document.createElement('input'), 'input', (e) => e.currentTarget?.value); +on(document.createElement('input'), 'input', (e) => e.currentTarget.value); on( document.body, From 03843b76ccf08fa9248b9fc46784b344b1c71756 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 22 Dec 2025 14:06:37 -0500 Subject: [PATCH 4/5] add currentTarget for other overloads --- packages/svelte/src/events/public.d.ts | 6 +++--- packages/svelte/types/index.d.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/events/public.d.ts b/packages/svelte/src/events/public.d.ts index e6cbaefced98..bf7b20c10812 100644 --- a/packages/svelte/src/events/public.d.ts +++ b/packages/svelte/src/events/public.d.ts @@ -8,7 +8,7 @@ export function on( window: Window, type: Type, - handler: (this: Window, event: WindowEventMap[Type]) => any, + handler: (this: Window, event: WindowEventMap[Type] & { currentTarget: Window }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** @@ -19,7 +19,7 @@ export function on( export function on( document: Document, type: Type, - handler: (this: Document, event: DocumentEventMap[Type]) => any, + handler: (this: Document, event: DocumentEventMap[Type] & { currentTarget: Document }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** @@ -41,7 +41,7 @@ export function on( element: Element, type: Type, - handler: (this: Element, event: MediaQueryListEventMap[Type]) => any, + handler: (this: Element, event: MediaQueryListEventMap[Type] & { currentTarget: Element }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 2bc925f84247..f1ee18f607b6 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -2801,7 +2801,7 @@ declare module 'svelte/events' { export function on( window: Window, type: Type, - handler: (this: Window, event: WindowEventMap[Type]) => any, + handler: (this: Window, event: WindowEventMap[Type] & { currentTarget: Window }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** @@ -2812,7 +2812,7 @@ declare module 'svelte/events' { export function on( document: Document, type: Type, - handler: (this: Document, event: DocumentEventMap[Type]) => any, + handler: (this: Document, event: DocumentEventMap[Type] & { currentTarget: Document }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** @@ -2834,7 +2834,7 @@ declare module 'svelte/events' { export function on( element: Element, type: Type, - handler: (this: Element, event: MediaQueryListEventMap[Type]) => any, + handler: (this: Element, event: MediaQueryListEventMap[Type] & { currentTarget: Element }) => any, options?: AddEventListenerOptions | undefined ): () => void; /** From 4f4cb9407647ebcecc7ae8c97f00015a142c458c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 22 Dec 2025 14:07:25 -0500 Subject: [PATCH 5/5] update changeset --- .changeset/bumpy-radios-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/bumpy-radios-live.md b/.changeset/bumpy-radios-live.md index 15422a54d6fe..f5aa4129c761 100644 --- a/.changeset/bumpy-radios-live.md +++ b/.changeset/bumpy-radios-live.md @@ -2,4 +2,4 @@ 'svelte': patch --- -type `currentTarget` in `on` function +fix: type `currentTarget` in `on` function