@types/react 19.2.2 → 19.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
react/README.md CHANGED
@@ -8,7 +8,7 @@ This package contains type definitions for react (https://react.dev/).
8
8
  Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react.
9
9
 
10
10
  ### Additional Details
11
- * Last updated: Tue, 07 Oct 2025 05:34:23 GMT
11
+ * Last updated: Tue, 27 Jan 2026 12:02:23 GMT
12
12
  * Dependencies: [csstype](https://npmjs.com/package/csstype)
13
13
 
14
14
  # Credits
react/canary.d.ts CHANGED
@@ -71,19 +71,19 @@ declare module "." {
71
71
  /**
72
72
  * The `<ViewTransition>` or its parent Component is mounted and there's no other `<ViewTransition>` with the same name being deleted.
73
73
  */
74
- onEnter?: (instance: ViewTransitionInstance, types: Array<string>) => void;
74
+ onEnter?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
75
75
  /**
76
76
  * The `<ViewTransition>` or its parent Component is unmounted and there's no other `<ViewTransition>` with the same name being deleted.
77
77
  */
78
- onExit?: (instance: ViewTransitionInstance, types: Array<string>) => void;
78
+ onExit?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
79
79
  /**
80
80
  * This `<ViewTransition>` is being mounted and another `<ViewTransition>` instance with the same name is being unmounted elsewhere.
81
81
  */
82
- onShare?: (instance: ViewTransitionInstance, types: Array<string>) => void;
82
+ onShare?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
83
83
  /**
84
84
  * The content of `<ViewTransition>` has changed either due to DOM mutations or because an inner child `<ViewTransition>` has resized.
85
85
  */
86
- onUpdate?: (instance: ViewTransitionInstance, types: Array<string>) => void;
86
+ onUpdate?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
87
87
  ref?: Ref<ViewTransitionInstance> | undefined;
88
88
  /**
89
89
  * Combined with {@link className} if this `<ViewTransition>` is being mounted and another instance with the same name is being unmounted elsewhere.
react/experimental.d.ts CHANGED
@@ -43,12 +43,13 @@ type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
43
43
 
44
44
  declare module "." {
45
45
  export interface SuspenseProps {
46
+ // @enableCPUSuspense
46
47
  /**
47
48
  * The presence of this prop indicates that the content is computationally expensive to render.
48
49
  * In other words, the tree is CPU bound and not I/O bound (e.g. due to fetching data).
49
50
  * @see {@link https://github.com/facebook/react/pull/19936}
50
51
  */
51
- unstable_expectedLoadTime?: number | undefined;
52
+ defer?: boolean | undefined;
52
53
  }
53
54
 
54
55
  export type SuspenseListRevealOrder = "forwards" | "backwards" | "together" | "independent";
@@ -68,17 +69,19 @@ declare module "." {
68
69
  children: Iterable<ReactElement> | AsyncIterable<ReactElement>;
69
70
  /**
70
71
  * Defines the order in which the `SuspenseList` children should be revealed.
72
+ * @default "forwards"
71
73
  */
72
- revealOrder: "forwards" | "backwards" | "unstable_legacy-backwards";
74
+ revealOrder?: "forwards" | "backwards" | "unstable_legacy-backwards" | undefined;
73
75
  /**
74
76
  * Dictates how unloaded items in a SuspenseList is shown.
75
77
  *
76
- * - By default, `SuspenseList` will show all fallbacks in the list.
77
78
  * - `collapsed` shows only the next fallback in the list.
78
79
  * - `hidden` doesn't show any unloaded items.
79
80
  * - `visible` shows all fallbacks in the list.
81
+ *
82
+ * @default "hidden"
80
83
  */
81
- tail: SuspenseListTailMode;
84
+ tail?: SuspenseListTailMode | undefined;
82
85
  }
83
86
 
84
87
  interface NonDirectionalSuspenseListProps extends SuspenseListCommonProps {
@@ -86,7 +89,7 @@ declare module "." {
86
89
  /**
87
90
  * Defines the order in which the `SuspenseList` children should be revealed.
88
91
  */
89
- revealOrder: Exclude<SuspenseListRevealOrder, DirectionalSuspenseListProps["revealOrder"]> | undefined;
92
+ revealOrder: Exclude<SuspenseListRevealOrder, DirectionalSuspenseListProps["revealOrder"]>;
90
93
  /**
91
94
  * The tail property is invalid when not using the `forwards` or `backwards` reveal orders.
92
95
  */
@@ -126,6 +129,9 @@ declare module "." {
126
129
  rangeStart?: number | undefined;
127
130
  rangeEnd?: number | undefined;
128
131
  }
132
+ export type GestureOptionsRequired = {
133
+ [P in keyof GestureOptions]-?: NonNullable<GestureOptions[P]>;
134
+ };
129
135
  /** */
130
136
  export function unstable_startGestureTransition(
131
137
  provider: GestureProvider,
@@ -133,6 +139,33 @@ declare module "." {
133
139
  options?: GestureOptions,
134
140
  ): () => void;
135
141
 
142
+ interface ViewTransitionProps {
143
+ onGestureEnter?: (
144
+ timeline: GestureProvider,
145
+ options: GestureOptionsRequired,
146
+ instance: ViewTransitionInstance,
147
+ types: Array<string>,
148
+ ) => void | (() => void);
149
+ onGestureExit?: (
150
+ timeline: GestureProvider,
151
+ options: GestureOptionsRequired,
152
+ instance: ViewTransitionInstance,
153
+ types: Array<string>,
154
+ ) => void | (() => void);
155
+ onGestureShare?: (
156
+ timeline: GestureProvider,
157
+ options: GestureOptionsRequired,
158
+ instance: ViewTransitionInstance,
159
+ types: Array<string>,
160
+ ) => void | (() => void);
161
+ onGestureUpdate?: (
162
+ timeline: GestureProvider,
163
+ options: GestureOptionsRequired,
164
+ instance: ViewTransitionInstance,
165
+ types: Array<string>,
166
+ ) => void | (() => void);
167
+ }
168
+
136
169
  // @enableSrcObject
137
170
  interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_IMG_SRC_TYPES {
138
171
  srcObject: Blob;
react/global.d.ts CHANGED
@@ -18,6 +18,7 @@ interface KeyboardEvent extends Event {}
18
18
  interface MouseEvent extends Event {}
19
19
  interface TouchEvent extends Event {}
20
20
  interface PointerEvent extends Event {}
21
+ interface SubmitEvent extends Event {}
21
22
  interface ToggleEvent extends Event {}
22
23
  interface TransitionEvent extends Event {}
23
24
  interface UIEvent extends Event {}
react/index.d.ts CHANGED
@@ -16,6 +16,7 @@ type NativeKeyboardEvent = KeyboardEvent;
16
16
  type NativeMouseEvent = MouseEvent;
17
17
  type NativeTouchEvent = TouchEvent;
18
18
  type NativePointerEvent = PointerEvent;
19
+ type NativeSubmitEvent = SubmitEvent;
19
20
  type NativeToggleEvent = ToggleEvent;
20
21
  type NativeTransitionEvent = TransitionEvent;
21
22
  type NativeUIEvent = UIEvent;
@@ -1926,7 +1927,31 @@ declare namespace React {
1926
1927
  reducer: (state: State, action: Action) => State,
1927
1928
  ): [State, (action: Action) => void];
1928
1929
 
1929
- export type Usable<T> = PromiseLike<T> | Context<T>;
1930
+ interface UntrackedReactPromise<T> extends PromiseLike<T> {
1931
+ status?: void;
1932
+ }
1933
+
1934
+ export interface PendingReactPromise<T> extends PromiseLike<T> {
1935
+ status: "pending";
1936
+ }
1937
+
1938
+ export interface FulfilledReactPromise<T> extends PromiseLike<T> {
1939
+ status: "fulfilled";
1940
+ value: T;
1941
+ }
1942
+
1943
+ export interface RejectedReactPromise<T> extends PromiseLike<T> {
1944
+ status: "rejected";
1945
+ reason: unknown;
1946
+ }
1947
+
1948
+ export type ReactPromise<T> =
1949
+ | UntrackedReactPromise<T>
1950
+ | PendingReactPromise<T>
1951
+ | FulfilledReactPromise<T>
1952
+ | RejectedReactPromise<T>;
1953
+
1954
+ export type Usable<T> = ReactPromise<T> | Context<T>;
1930
1955
 
1931
1956
  export function use<T>(usable: Usable<T>): T;
1932
1957
 
@@ -2041,15 +2066,28 @@ declare namespace React {
2041
2066
  target: EventTarget & Target;
2042
2067
  }
2043
2068
 
2069
+ /**
2070
+ * @deprecated FormEvent doesn't actually exist.
2071
+ * You probably meant to use {@link ChangeEvent}, {@link InputEvent}, {@link SubmitEvent}, or just {@link SyntheticEvent} instead
2072
+ * depending on the event type.
2073
+ */
2044
2074
  interface FormEvent<T = Element> extends SyntheticEvent<T> {
2045
2075
  }
2046
2076
 
2047
2077
  interface InvalidEvent<T = Element> extends SyntheticEvent<T> {
2048
- target: EventTarget & T;
2049
2078
  }
2050
2079
 
2051
- interface ChangeEvent<T = Element> extends SyntheticEvent<T> {
2052
- target: EventTarget & T;
2080
+ /**
2081
+ * change events bubble in React so their target is generally unknown.
2082
+ * Only for form elements we know their target type because form events can't
2083
+ * be nested.
2084
+ * This type exists purely to narrow `target` for form elements. It doesn't
2085
+ * reflect a DOM event. Change events are just fired as standard {@link SyntheticEvent}.
2086
+ */
2087
+ interface ChangeEvent<CurrentTarget = Element, Target = Element> extends SyntheticEvent<CurrentTarget> {
2088
+ // TODO: This is wrong for change event handlers on arbitrary. Should
2089
+ // be EventTarget & Target, but kept for backward compatibility until React 20.
2090
+ target: EventTarget & CurrentTarget;
2053
2091
  }
2054
2092
 
2055
2093
  interface InputEvent<T = Element> extends SyntheticEvent<T, NativeInputEvent> {
@@ -2119,6 +2157,13 @@ declare namespace React {
2119
2157
  shiftKey: boolean;
2120
2158
  }
2121
2159
 
2160
+ interface SubmitEvent<T = Element> extends SyntheticEvent<T, NativeSubmitEvent> {
2161
+ // Currently not exposed by Reat
2162
+ // submitter: HTMLElement | null;
2163
+ // SubmitEvents are always targetted at HTMLFormElements.
2164
+ target: EventTarget & HTMLFormElement;
2165
+ }
2166
+
2122
2167
  interface TouchEvent<T = Element> extends UIEvent<T, NativeTouchEvent> {
2123
2168
  altKey: boolean;
2124
2169
  changedTouches: TouchList;
@@ -2174,11 +2219,19 @@ declare namespace React {
2174
2219
  type CompositionEventHandler<T = Element> = EventHandler<CompositionEvent<T>>;
2175
2220
  type DragEventHandler<T = Element> = EventHandler<DragEvent<T>>;
2176
2221
  type FocusEventHandler<T = Element> = EventHandler<FocusEvent<T>>;
2222
+ /**
2223
+ * @deprecated FormEventHandler doesn't actually exist.
2224
+ * You probably meant to use {@link ChangeEventHandler}, {@link InputEventHandler}, {@link SubmitEventHandler}, or just {@link EventHandler} instead
2225
+ * depending on the event type.
2226
+ */
2177
2227
  type FormEventHandler<T = Element> = EventHandler<FormEvent<T>>;
2178
- type ChangeEventHandler<T = Element> = EventHandler<ChangeEvent<T>>;
2228
+ type ChangeEventHandler<CurrentTarget = Element, Target = Element> = EventHandler<
2229
+ ChangeEvent<CurrentTarget, Target>
2230
+ >;
2179
2231
  type InputEventHandler<T = Element> = EventHandler<InputEvent<T>>;
2180
2232
  type KeyboardEventHandler<T = Element> = EventHandler<KeyboardEvent<T>>;
2181
2233
  type MouseEventHandler<T = Element> = EventHandler<MouseEvent<T>>;
2234
+ type SubmitEventHandler<T = Element> = EventHandler<SubmitEvent<T>>;
2182
2235
  type TouchEventHandler<T = Element> = EventHandler<TouchEvent<T>>;
2183
2236
  type PointerEventHandler<T = Element> = EventHandler<PointerEvent<T>>;
2184
2237
  type UIEventHandler<T = Element> = EventHandler<UIEvent<T>>;
@@ -2232,19 +2285,19 @@ declare namespace React {
2232
2285
  onBlur?: FocusEventHandler<T> | undefined;
2233
2286
  onBlurCapture?: FocusEventHandler<T> | undefined;
2234
2287
 
2235
- // Form Events
2236
- onChange?: FormEventHandler<T> | undefined;
2237
- onChangeCapture?: FormEventHandler<T> | undefined;
2288
+ // form related Events
2289
+ onChange?: ChangeEventHandler<T> | undefined;
2290
+ onChangeCapture?: ChangeEventHandler<T> | undefined;
2238
2291
  onBeforeInput?: InputEventHandler<T> | undefined;
2239
- onBeforeInputCapture?: FormEventHandler<T> | undefined;
2240
- onInput?: FormEventHandler<T> | undefined;
2241
- onInputCapture?: FormEventHandler<T> | undefined;
2242
- onReset?: FormEventHandler<T> | undefined;
2243
- onResetCapture?: FormEventHandler<T> | undefined;
2244
- onSubmit?: FormEventHandler<T> | undefined;
2245
- onSubmitCapture?: FormEventHandler<T> | undefined;
2246
- onInvalid?: FormEventHandler<T> | undefined;
2247
- onInvalidCapture?: FormEventHandler<T> | undefined;
2292
+ onBeforeInputCapture?: InputEventHandler<T> | undefined;
2293
+ onInput?: InputEventHandler<T> | undefined;
2294
+ onInputCapture?: InputEventHandler<T> | undefined;
2295
+ onReset?: ReactEventHandler<T> | undefined;
2296
+ onResetCapture?: ReactEventHandler<T> | undefined;
2297
+ onSubmit?: SubmitEventHandler<T> | undefined;
2298
+ onSubmitCapture?: SubmitEventHandler<T> | undefined;
2299
+ onInvalid?: ReactEventHandler<T> | undefined;
2300
+ onInvalidCapture?: ReactEventHandler<T> | undefined;
2248
2301
 
2249
2302
  // Image Events
2250
2303
  onLoad?: ReactEventHandler<T> | undefined;
@@ -3251,7 +3304,9 @@ declare namespace React {
3251
3304
  value?: string | readonly string[] | number | undefined;
3252
3305
  width?: number | string | undefined;
3253
3306
 
3254
- onChange?: ChangeEventHandler<T> | undefined;
3307
+ // No other element dispatching change events can be nested in a <input>
3308
+ // so we know the target will be a HTMLInputElement.
3309
+ onChange?: ChangeEventHandler<T, HTMLInputElement> | undefined;
3255
3310
  }
3256
3311
 
3257
3312
  interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> {
@@ -3416,7 +3471,9 @@ declare namespace React {
3416
3471
  required?: boolean | undefined;
3417
3472
  size?: number | undefined;
3418
3473
  value?: string | readonly string[] | number | undefined;
3419
- onChange?: ChangeEventHandler<T> | undefined;
3474
+ // No other element dispatching change events can be nested in a <select>
3475
+ // so we know the target will be a HTMLSelectElement.
3476
+ onChange?: ChangeEventHandler<T, HTMLSelectElement> | undefined;
3420
3477
  }
3421
3478
 
3422
3479
  interface SourceHTMLAttributes<T> extends HTMLAttributes<T> {
@@ -3468,7 +3525,9 @@ declare namespace React {
3468
3525
  value?: string | readonly string[] | number | undefined;
3469
3526
  wrap?: string | undefined;
3470
3527
 
3471
- onChange?: ChangeEventHandler<T> | undefined;
3528
+ // No other element dispatching change events can be nested in a <textare>
3529
+ // so we know the target will be a HTMLTextAreaElement.
3530
+ onChange?: ChangeEventHandler<T, HTMLTextAreaElement> | undefined;
3472
3531
  }
3473
3532
 
3474
3533
  interface TdHTMLAttributes<T> extends HTMLAttributes<T> {
@@ -3540,6 +3599,9 @@ declare namespace React {
3540
3599
  method?: string | undefined;
3541
3600
  min?: number | string | undefined;
3542
3601
  name?: string | undefined;
3602
+ nonce?: string | undefined;
3603
+ part?: string | undefined;
3604
+ slot?: string | undefined;
3543
3605
  style?: CSSProperties | undefined;
3544
3606
  target?: string | undefined;
3545
3607
  type?: string | undefined;
@@ -4057,7 +4119,6 @@ declare namespace React {
4057
4119
  * Captures which component contained the exception, and its ancestors.
4058
4120
  */
4059
4121
  componentStack?: string | null;
4060
- digest?: string | null;
4061
4122
  }
4062
4123
 
4063
4124
  // Keep in sync with JSX namespace in ./jsx-runtime.d.ts and ./jsx-dev-runtime.d.ts
react/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@types/react",
3
- "version": "19.2.2",
3
+ "version": "19.2.10",
4
4
  "description": "TypeScript definitions for react",
5
5
  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react",
6
6
  "license": "MIT",
@@ -202,9 +202,9 @@
202
202
  },
203
203
  "scripts": {},
204
204
  "dependencies": {
205
- "csstype": "^3.0.2"
205
+ "csstype": "^3.2.2"
206
206
  },
207
207
  "peerDependencies": {},
208
- "typesPublisherContentHash": "68c52e24d44da5913d4220a0dd3380ca866be4e58a724ee668fa152a7b358e72",
208
+ "typesPublisherContentHash": "c1bacedf82d12682fbaf19b2e74fd83bbeea9f1592d6885e013c8c1379ce22e8",
209
209
  "typeScriptVersion": "5.2"
210
210
  }
react/ts5.0/canary.d.ts CHANGED
@@ -71,19 +71,19 @@ declare module "." {
71
71
  /**
72
72
  * The `<ViewTransition>` or its parent Component is mounted and there's no other `<ViewTransition>` with the same name being deleted.
73
73
  */
74
- onEnter?: (instance: ViewTransitionInstance, types: Array<string>) => void;
74
+ onEnter?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
75
75
  /**
76
76
  * The `<ViewTransition>` or its parent Component is unmounted and there's no other `<ViewTransition>` with the same name being deleted.
77
77
  */
78
- onExit?: (instance: ViewTransitionInstance, types: Array<string>) => void;
78
+ onExit?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
79
79
  /**
80
80
  * This `<ViewTransition>` is being mounted and another `<ViewTransition>` instance with the same name is being unmounted elsewhere.
81
81
  */
82
- onShare?: (instance: ViewTransitionInstance, types: Array<string>) => void;
82
+ onShare?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
83
83
  /**
84
84
  * The content of `<ViewTransition>` has changed either due to DOM mutations or because an inner child `<ViewTransition>` has resized.
85
85
  */
86
- onUpdate?: (instance: ViewTransitionInstance, types: Array<string>) => void;
86
+ onUpdate?: (instance: ViewTransitionInstance, types: Array<string>) => void | (() => void);
87
87
  ref?: Ref<ViewTransitionInstance> | undefined;
88
88
  /**
89
89
  * Combined with {@link className} if this `<ViewTransition>` is being mounted and another instance with the same name is being unmounted elsewhere.
@@ -43,12 +43,13 @@ type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
43
43
 
44
44
  declare module "." {
45
45
  export interface SuspenseProps {
46
+ // @enableCPUSuspense
46
47
  /**
47
48
  * The presence of this prop indicates that the content is computationally expensive to render.
48
49
  * In other words, the tree is CPU bound and not I/O bound (e.g. due to fetching data).
49
50
  * @see {@link https://github.com/facebook/react/pull/19936}
50
51
  */
51
- unstable_expectedLoadTime?: number | undefined;
52
+ defer?: boolean | undefined;
52
53
  }
53
54
 
54
55
  export type SuspenseListRevealOrder = "forwards" | "backwards" | "together" | "independent";
@@ -68,17 +69,19 @@ declare module "." {
68
69
  children: Iterable<ReactElement> | AsyncIterable<ReactElement>;
69
70
  /**
70
71
  * Defines the order in which the `SuspenseList` children should be revealed.
72
+ * @default "forwards"
71
73
  */
72
- revealOrder: "forwards" | "backwards" | "unstable_legacy-backwards";
74
+ revealOrder?: "forwards" | "backwards" | "unstable_legacy-backwards" | undefined;
73
75
  /**
74
76
  * Dictates how unloaded items in a SuspenseList is shown.
75
77
  *
76
- * - By default, `SuspenseList` will show all fallbacks in the list.
77
78
  * - `collapsed` shows only the next fallback in the list.
78
79
  * - `hidden` doesn't show any unloaded items.
79
80
  * - `visible` shows all fallbacks in the list.
81
+ *
82
+ * @default "hidden"
80
83
  */
81
- tail: SuspenseListTailMode;
84
+ tail?: SuspenseListTailMode | undefined;
82
85
  }
83
86
 
84
87
  interface NonDirectionalSuspenseListProps extends SuspenseListCommonProps {
@@ -86,7 +89,7 @@ declare module "." {
86
89
  /**
87
90
  * Defines the order in which the `SuspenseList` children should be revealed.
88
91
  */
89
- revealOrder: Exclude<SuspenseListRevealOrder, DirectionalSuspenseListProps["revealOrder"]> | undefined;
92
+ revealOrder: Exclude<SuspenseListRevealOrder, DirectionalSuspenseListProps["revealOrder"]>;
90
93
  /**
91
94
  * The tail property is invalid when not using the `forwards` or `backwards` reveal orders.
92
95
  */
@@ -126,6 +129,9 @@ declare module "." {
126
129
  rangeStart?: number | undefined;
127
130
  rangeEnd?: number | undefined;
128
131
  }
132
+ export type GestureOptionsRequired = {
133
+ [P in keyof GestureOptions]-?: NonNullable<GestureOptions[P]>;
134
+ };
129
135
  /** */
130
136
  export function unstable_startGestureTransition(
131
137
  provider: GestureProvider,
@@ -133,6 +139,33 @@ declare module "." {
133
139
  options?: GestureOptions,
134
140
  ): () => void;
135
141
 
142
+ interface ViewTransitionProps {
143
+ onGestureEnter?: (
144
+ timeline: GestureProvider,
145
+ options: GestureOptionsRequired,
146
+ instance: ViewTransitionInstance,
147
+ types: Array<string>,
148
+ ) => void | (() => void);
149
+ onGestureExit?: (
150
+ timeline: GestureProvider,
151
+ options: GestureOptionsRequired,
152
+ instance: ViewTransitionInstance,
153
+ types: Array<string>,
154
+ ) => void | (() => void);
155
+ onGestureShare?: (
156
+ timeline: GestureProvider,
157
+ options: GestureOptionsRequired,
158
+ instance: ViewTransitionInstance,
159
+ types: Array<string>,
160
+ ) => void | (() => void);
161
+ onGestureUpdate?: (
162
+ timeline: GestureProvider,
163
+ options: GestureOptionsRequired,
164
+ instance: ViewTransitionInstance,
165
+ types: Array<string>,
166
+ ) => void | (() => void);
167
+ }
168
+
136
169
  // @enableSrcObject
137
170
  interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_IMG_SRC_TYPES {
138
171
  srcObject: Blob;
react/ts5.0/global.d.ts CHANGED
@@ -18,6 +18,7 @@ interface KeyboardEvent extends Event {}
18
18
  interface MouseEvent extends Event {}
19
19
  interface TouchEvent extends Event {}
20
20
  interface PointerEvent extends Event {}
21
+ interface SubmitEvent extends Event {}
21
22
  interface ToggleEvent extends Event {}
22
23
  interface TransitionEvent extends Event {}
23
24
  interface UIEvent extends Event {}
react/ts5.0/index.d.ts CHANGED
@@ -16,6 +16,7 @@ type NativeKeyboardEvent = KeyboardEvent;
16
16
  type NativeMouseEvent = MouseEvent;
17
17
  type NativeTouchEvent = TouchEvent;
18
18
  type NativePointerEvent = PointerEvent;
19
+ type NativeSubmitEvent = SubmitEvent;
19
20
  type NativeToggleEvent = ToggleEvent;
20
21
  type NativeTransitionEvent = TransitionEvent;
21
22
  type NativeUIEvent = UIEvent;
@@ -1925,7 +1926,31 @@ declare namespace React {
1925
1926
  reducer: (state: State, action: Action) => State,
1926
1927
  ): [State, (action: Action) => void];
1927
1928
 
1928
- export type Usable<T> = PromiseLike<T> | Context<T>;
1929
+ interface UntrackedReactPromise<T> extends PromiseLike<T> {
1930
+ status?: void;
1931
+ }
1932
+
1933
+ export interface PendingReactPromise<T> extends PromiseLike<T> {
1934
+ status: "pending";
1935
+ }
1936
+
1937
+ export interface FulfilledReactPromise<T> extends PromiseLike<T> {
1938
+ status: "fulfilled";
1939
+ value: T;
1940
+ }
1941
+
1942
+ export interface RejectedReactPromise<T> extends PromiseLike<T> {
1943
+ status: "rejected";
1944
+ reason: unknown;
1945
+ }
1946
+
1947
+ export type ReactPromise<T> =
1948
+ | UntrackedReactPromise<T>
1949
+ | PendingReactPromise<T>
1950
+ | FulfilledReactPromise<T>
1951
+ | RejectedReactPromise<T>;
1952
+
1953
+ export type Usable<T> = ReactPromise<T> | Context<T>;
1929
1954
 
1930
1955
  export function use<T>(usable: Usable<T>): T;
1931
1956
 
@@ -2040,15 +2065,28 @@ declare namespace React {
2040
2065
  target: EventTarget & Target;
2041
2066
  }
2042
2067
 
2068
+ /**
2069
+ * @deprecated FormEvent doesn't actually exist.
2070
+ * You probably meant to use {@link ChangeEvent}, {@link InputEvent}, {@link SubmitEvent}, or just {@link SyntheticEvent} instead
2071
+ * depending on the event type.
2072
+ */
2043
2073
  interface FormEvent<T = Element> extends SyntheticEvent<T> {
2044
2074
  }
2045
2075
 
2046
2076
  interface InvalidEvent<T = Element> extends SyntheticEvent<T> {
2047
- target: EventTarget & T;
2048
2077
  }
2049
2078
 
2050
- interface ChangeEvent<T = Element> extends SyntheticEvent<T> {
2051
- target: EventTarget & T;
2079
+ /**
2080
+ * change events bubble in React so their target is generally unknown.
2081
+ * Only for form elements we know their target type because form events can't
2082
+ * be nested.
2083
+ * This type exists purely to narrow `target` for form elements. It doesn't
2084
+ * reflect a DOM event. React fires change events as {@link SyntheticEvent}.
2085
+ */
2086
+ interface ChangeEvent<CurrentTarget = Element, Target = Element> extends SyntheticEvent<CurrentTarget> {
2087
+ // TODO: This is wrong for change event handlers on arbitrary. Should
2088
+ // be EventTarget & Target, but kept for backward compatibility until React 20.
2089
+ target: EventTarget & CurrentTarget;
2052
2090
  }
2053
2091
 
2054
2092
  interface InputEvent<T = Element> extends SyntheticEvent<T, NativeInputEvent> {
@@ -2118,6 +2156,13 @@ declare namespace React {
2118
2156
  shiftKey: boolean;
2119
2157
  }
2120
2158
 
2159
+ interface SubmitEvent<T = Element> extends SyntheticEvent<T, NativeSubmitEvent> {
2160
+ // Currently not exposed by Reat
2161
+ // submitter: HTMLElement | null;
2162
+ // SubmitEvents are always targetted at HTMLFormElements.
2163
+ target: EventTarget & HTMLFormElement;
2164
+ }
2165
+
2121
2166
  interface TouchEvent<T = Element> extends UIEvent<T, NativeTouchEvent> {
2122
2167
  altKey: boolean;
2123
2168
  changedTouches: TouchList;
@@ -2173,11 +2218,19 @@ declare namespace React {
2173
2218
  type CompositionEventHandler<T = Element> = EventHandler<CompositionEvent<T>>;
2174
2219
  type DragEventHandler<T = Element> = EventHandler<DragEvent<T>>;
2175
2220
  type FocusEventHandler<T = Element> = EventHandler<FocusEvent<T>>;
2221
+ /**
2222
+ * @deprecated FormEventHandler doesn't actually exist.
2223
+ * You probably meant to use {@link ChangeEventHandler}, {@link InputEventHandler}, {@link SubmitEventHandler}, or just {@link EventHandler} instead
2224
+ * depending on the event type.
2225
+ */
2176
2226
  type FormEventHandler<T = Element> = EventHandler<FormEvent<T>>;
2177
- type ChangeEventHandler<T = Element> = EventHandler<ChangeEvent<T>>;
2227
+ type ChangeEventHandler<CurrentTarget = Element, Target = Element> = EventHandler<
2228
+ ChangeEvent<CurrentTarget, Target>
2229
+ >;
2178
2230
  type InputEventHandler<T = Element> = EventHandler<InputEvent<T>>;
2179
2231
  type KeyboardEventHandler<T = Element> = EventHandler<KeyboardEvent<T>>;
2180
2232
  type MouseEventHandler<T = Element> = EventHandler<MouseEvent<T>>;
2233
+ type SubmitEventHandler<T = Element> = EventHandler<SubmitEvent<T>>;
2181
2234
  type TouchEventHandler<T = Element> = EventHandler<TouchEvent<T>>;
2182
2235
  type PointerEventHandler<T = Element> = EventHandler<PointerEvent<T>>;
2183
2236
  type UIEventHandler<T = Element> = EventHandler<UIEvent<T>>;
@@ -2231,19 +2284,19 @@ declare namespace React {
2231
2284
  onBlur?: FocusEventHandler<T> | undefined;
2232
2285
  onBlurCapture?: FocusEventHandler<T> | undefined;
2233
2286
 
2234
- // Form Events
2235
- onChange?: FormEventHandler<T> | undefined;
2236
- onChangeCapture?: FormEventHandler<T> | undefined;
2287
+ // form related Events
2288
+ onChange?: ChangeEventHandler<T> | undefined;
2289
+ onChangeCapture?: ChangeEventHandler<T> | undefined;
2237
2290
  onBeforeInput?: InputEventHandler<T> | undefined;
2238
- onBeforeInputCapture?: FormEventHandler<T> | undefined;
2239
- onInput?: FormEventHandler<T> | undefined;
2240
- onInputCapture?: FormEventHandler<T> | undefined;
2241
- onReset?: FormEventHandler<T> | undefined;
2242
- onResetCapture?: FormEventHandler<T> | undefined;
2243
- onSubmit?: FormEventHandler<T> | undefined;
2244
- onSubmitCapture?: FormEventHandler<T> | undefined;
2245
- onInvalid?: FormEventHandler<T> | undefined;
2246
- onInvalidCapture?: FormEventHandler<T> | undefined;
2291
+ onBeforeInputCapture?: InputEventHandler<T> | undefined;
2292
+ onInput?: InputEventHandler<T> | undefined;
2293
+ onInputCapture?: InputEventHandler<T> | undefined;
2294
+ onReset?: ReactEventHandler<T> | undefined;
2295
+ onResetCapture?: ReactEventHandler<T> | undefined;
2296
+ onSubmit?: SubmitEventHandler<T> | undefined;
2297
+ onSubmitCapture?: SubmitEventHandler<T> | undefined;
2298
+ onInvalid?: ReactEventHandler<T> | undefined;
2299
+ onInvalidCapture?: ReactEventHandler<T> | undefined;
2247
2300
 
2248
2301
  // Image Events
2249
2302
  onLoad?: ReactEventHandler<T> | undefined;
@@ -3250,7 +3303,9 @@ declare namespace React {
3250
3303
  value?: string | readonly string[] | number | undefined;
3251
3304
  width?: number | string | undefined;
3252
3305
 
3253
- onChange?: ChangeEventHandler<T> | undefined;
3306
+ // No other element dispatching change events can be nested in a <input>
3307
+ // so we know the target will be a HTMLInputElement.
3308
+ onChange?: ChangeEventHandler<T, HTMLInputElement> | undefined;
3254
3309
  }
3255
3310
 
3256
3311
  interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> {
@@ -3415,7 +3470,9 @@ declare namespace React {
3415
3470
  required?: boolean | undefined;
3416
3471
  size?: number | undefined;
3417
3472
  value?: string | readonly string[] | number | undefined;
3418
- onChange?: ChangeEventHandler<T> | undefined;
3473
+ // No other element dispatching change events can be nested in a <select>
3474
+ // so we know the target will be a HTMLSelectElement.
3475
+ onChange?: ChangeEventHandler<T, HTMLSelectElement> | undefined;
3419
3476
  }
3420
3477
 
3421
3478
  interface SourceHTMLAttributes<T> extends HTMLAttributes<T> {
@@ -3467,7 +3524,9 @@ declare namespace React {
3467
3524
  value?: string | readonly string[] | number | undefined;
3468
3525
  wrap?: string | undefined;
3469
3526
 
3470
- onChange?: ChangeEventHandler<T> | undefined;
3527
+ // No other element dispatching change events can be nested in a <textarea>
3528
+ // so we know the target will be a HTMLTextAreaElement.
3529
+ onChange?: ChangeEventHandler<T, HTMLTextAreaElement> | undefined;
3471
3530
  }
3472
3531
 
3473
3532
  interface TdHTMLAttributes<T> extends HTMLAttributes<T> {
@@ -4056,7 +4115,6 @@ declare namespace React {
4056
4115
  * Captures which component contained the exception, and its ancestors.
4057
4116
  */
4058
4117
  componentStack?: string | null;
4059
- digest?: string | null;
4060
4118
  }
4061
4119
 
4062
4120
  // Keep in sync with JSX namespace in ./jsx-runtime.d.ts and ./jsx-dev-runtime.d.ts