Это может работать для вас:
type Props = {
as?: React.FC<{ to: string, children: any }>,
to: string,
children: any
}
const Wrapped: React.FC<Props> = ({ as: El, to, children }) => (
El
? <El to={to}>{children}</El>
: <a href={to}>{children}</a>
)
Тогда вы можете использовать с as
проп:
<Wrapped as={Link} to="/somewhere">label</Wrapped>
... или без значения по умолчанию <a>
элемент:
<Wrapped to="/somewhere">label</Wrapped>
В дополнение к вашему комментарию ниже, если вы хотите, чтобы Wrapped
принимал реквизиты компонента, переданного в as
реквизит, тогда я не уверен, как это сделать или возможно ли это.
Тем не менее, вы можете попробовать что-то вроде этого:
<Wrapped as={<Link to="somewhere">{label}</Link>} />
... так что передача Link
в as
реквизит таким образом означает, что вам не нужно передавать реквизит Wrapped
.
type Props = {
as?: React.ReactNode
children: any
}
const Wrapped: React.FC<Props> = ({ as, children }) => (
<>{ as ? as : <a href="/somewhere">{children}</a>}</>
)