Jelajahi Sumber

types(jsx): Allow modifiers to jSX event

Carlos Rodrigues 2 tahun lalu
induk
melakukan
972a791b7e
2 mengubah file dengan 19 tambahan dan 1 penghapusan
  1. 12 0
      packages/dts-test/tsx.test-d.tsx
  2. 7 1
      packages/runtime-dom/src/jsx.ts

+ 12 - 0
packages/dts-test/tsx.test-d.tsx

@@ -30,6 +30,18 @@ expectType<JSX.Element>(
       // infer correct event type
       expectType<EventTarget | null>(e.target)
     }}
+    onInputCapture={e => {
+      expectType<EventTarget | null>(e.target)
+    }}
+    onInputOnce={e => {
+      expectType<EventTarget | null>(e.target)
+    }}
+    onInputOnceCapture={e => {
+      expectType<EventTarget | null>(e.target)
+    }}
+    onInputCaptureOnce={e => {
+      expectType<EventTarget | null>(e.target)
+    }}
   />
 )
 

+ 7 - 1
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<E> = {
   [K in keyof E]?: E[K] extends (...args: any) => any
     ? E[K]