import React from 'react'; import { Prefer } from './utils'; export type ExtractRefElement = T extends React.RefObject ? E : never; export type As = React.ElementType; /** * Adds props `as` and `css` from styled component. */ export type PropsWithAs = Prefer< { as?: Component; }, Props >; /** * Adds `as` prop and merges `Props` with props from As `Component`. */ export type AsProps = Prefer< PropsWithAs, React.ComponentPropsWithRef >; export interface ComponentWithAs extends React.ExoticComponent { ( props: Prefer< PropsWithAs, React.ComponentProps >, ): React.ReactElement | null; } export interface ForwardRefComponentWithAs< Props = {}, Component extends As = As, > extends React.ForwardRefExoticComponent> { ( props: AsProps, ): React.ReactElement | null; }