@@ -144,9 +144,16 @@ export function createElement<T extends Element>(
144144) : T
145145
146146// Custom components
147- export function createElement < P extends { } , T extends Element > (
148- type : ComponentType < P , T > ,
149- props ?: ( Attributes & P ) | null ,
147+ export function createElement < T extends Element , Type extends ComponentClass < any , T > > (
148+ type : Type ,
149+ props ?:
150+ | ( Attributes & PropOfComponent < Type > & { ref ?: Ref < InstanceType < Type > > | undefined } )
151+ | null ,
152+ ...children : ReactNode [ ]
153+ ) : T
154+ export function createElement < P extends { } , T extends Element , Type extends ComponentClass < P , T > > (
155+ type : Type ,
156+ props ?: ( Attributes & P & { ref ?: Ref < InstanceType < Type > > | undefined } ) | null ,
150157 ...children : ReactNode [ ]
151158) : T
152159
@@ -228,7 +235,7 @@ export interface ComponentClass<P = {}, T extends Element = JSX.Element> {
228235}
229236
230237export class Component < P = { } , T extends Element = JSX . Element > {
231- constructor ( props : PropsWithChildren < P > )
238+ constructor ( props : PropsWithChildren < P > & { ref ?: Ref < any > } )
232239 readonly props : PropsWithChildren < P >
233240 render ( ) : T | null
234241}
@@ -241,6 +248,8 @@ export type ComponentType<P = {}, T extends Element = JSX.Element> =
241248 | ComponentClass < P , T >
242249 | FunctionComponent < P , T >
243250
251+ type PropOfComponent < T > = T extends ComponentType < infer P > ? P : never
252+
244253//
245254// React Hooks
246255// ----------------------------------------------------------------------
0 commit comments