我有一个组件Button
,它带有道具renderAs
。
例如,我想将其从Link
渲染为react-router-dom
,但是Button
不接受Link
接受的道具。
一般而言,我如何获得Button来允许renderAs
中定义的组件接受的所有道具?
Here is a link在我的声明文件中为Button
类型。
代码:
Button
是一个简单的函数,它呈现Element
,而Element
看起来像这样:
const Element = React.forwardRef(({
className,
renderAs,
...allProps
}, ref) => {
const RenderAs = renderAs;
const props = modifiers.clean(allProps);
return (
<RenderAs
ref={ref}
className={classnames(className, modifiers.classnames(allProps)) || undefined}
{...props}
/>
);
});
(然后可以假设问题是:我如何获得Element
来接受renderAs
组件所接受的任何道具?)
我的声明文件中Element
的(相关)接口如下:
interface ElementProps
extends Partial<
React.ComponentPropsWithoutRef<keyof JSX.IntrinsicElements>
> {
className?: string;
renderAs?: keyof JSX.IntrinsicElements | React.ComponentType<any>;
// [key: string]: any; // former attempt; but disables all prop checking
}
declare const Element: React.ForwardRefExoticComponent<
React.PropsWithoutRef<ElementProps> & React.RefAttributes<any>
>;