From: Carlos Rodrigues Date: Fri, 3 Nov 2023 15:41:36 +0000 (+0000) Subject: types(jsx): Allow modifiers to jSX event X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=972a791b7e784ee14b9554e55ad3b28025448653;p=thirdparty%2Fvuejs%2Fcore.git types(jsx): Allow modifiers to jSX event --- diff --git a/packages/dts-test/tsx.test-d.tsx b/packages/dts-test/tsx.test-d.tsx index 04915a9673..56f8d2f73b 100644 --- a/packages/dts-test/tsx.test-d.tsx +++ b/packages/dts-test/tsx.test-d.tsx @@ -30,6 +30,18 @@ expectType( // infer correct event type expectType(e.target) }} + onInputCapture={e => { + expectType(e.target) + }} + onInputOnce={e => { + expectType(e.target) + }} + onInputOnceCapture={e => { + expectType(e.target) + }} + onInputCaptureOnce={e => { + expectType(e.target) + }} /> ) diff --git a/packages/runtime-dom/src/jsx.ts b/packages/runtime-dom/src/jsx.ts index 7769418653..3de0667238 100644 --- a/packages/runtime-dom/src/jsx.ts +++ b/packages/runtime-dom/src/jsx.ts @@ -1235,7 +1235,7 @@ export interface IntrinsicElementAttributes { view: SVGAttributes } -export interface Events { +export interface BaseEvents { // clipboard events onCopy: ClipboardEvent onCut: ClipboardEvent @@ -1351,6 +1351,12 @@ export interface Events { onTransitionstart: TransitionEvent } +type EventModifiers = 'Capture' | 'Once' | `OnceCapture` | 'CaptureOnce' + +type Events = BaseEvents & { + [K in keyof BaseEvents as `${K & string}${EventModifiers}`]: BaseEvents[K] +} + type EventHandlers = { [K in keyof E]?: E[K] extends (...args: any) => any ? E[K]