组件接受`renderAs`并应接受其任何道具

时间:2018-11-19 19:12:01

标签: reactjs typescript

我有一个组件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>
>;

0 个答案:

没有答案