UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

29 lines (28 loc) 1.14 kB
import type * as React from 'react'; export type CommonProps = { id?: string; className?: string; style?: React.CSSProperties; }; /** * Makes `as` prop available and merges original OwnProps and the inferred props from `as` element. * Extends ForwardRefExoticComponent so ref gets the correct type. * * `DefaultAs` should be the default element that is used for the `as` prop. * * @example * const Button = React.forwardRef((props, forwardedRef) => { * // ... * }) as PolymorphicForwardRefComponent<'button', ButtonOwnProps>; */ export interface PolymorphicForwardRefComponent<DefaultAs, OwnProps = {}> extends React.ForwardRefExoticComponent<Merge<DefaultAs extends React.ElementType<any> ? React.ComponentPropsWithRef<DefaultAs> : never, OwnProps & { as?: DefaultAs; }>> { <As = DefaultAs>(props: As extends keyof React.JSX.IntrinsicElements ? Merge<React.JSX.IntrinsicElements[As], OwnProps & { as: As; }> : As extends React.ComponentType<infer P> ? Merge<P, OwnProps & { as: As; }> : never): React.ReactElement<any> | null; } type Merge<P1, P2> = Omit<P1, keyof P2> & P2; export {};