Skip to content

Commit 04684dd

Browse files
authored
feat: Add ElementRef type to compat (#4557)
1 parent daa124a commit 04684dd

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

compat/src/index.d.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,14 +286,26 @@ declare namespace React {
286286
ComponentProps<T>
287287
>;
288288

289-
export type ComponentPropsWithRef<
290-
C extends ComponentType<any> | keyof JSXInternal.IntrinsicElements
291-
> = C extends new (
289+
export type ComponentPropsWithRef<C extends ElementType> = C extends new (
292290
props: infer P
293291
) => Component<any, any>
294292
? PropsWithoutRef<P> & RefAttributes<InstanceType<C>>
295293
: ComponentProps<C>;
296294

295+
export type ElementRef<
296+
C extends
297+
| ForwardRefExoticComponent<any>
298+
| { new (props: any): Component<any, any> }
299+
| ((props: any) => ReactNode)
300+
| keyof JSXInternal.IntrinsicElements
301+
> = 'ref' extends keyof ComponentPropsWithRef<C>
302+
? NonNullable<ComponentPropsWithRef<C>['ref']> extends RefAttributes<
303+
infer Instance
304+
>['ref']
305+
? Instance
306+
: never
307+
: never;
308+
297309
export function flushSync<R>(fn: () => R): R;
298310
export function flushSync<A, R>(fn: (a: A) => R, a: A): R;
299311

0 commit comments

Comments
 (0)