相关疑难解决方法(0)

如何在传递 props 的同时使用 TypeScript 实现“as”props?

我正在构建一个组件库,我需要其中一些组件具有可自定义的标签名称。例如,有时看起来像 a<button>实际上是<a>。所以我希望能够像这样使用按钮组件:

<Button onClick={onClick}>Click me!</Button>
<Button as="a" href="/some-url">Click me!</Button>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望根据“as”道具推断可用的道具:

// Throws an error because the default value of "as" is "button",
// which doesn't accept the "href" attribute.
<Button href="/some-url">Click me!<Button>
Run Code Online (Sandbox Code Playgroud)

我们可能还需要传递一个自定义组件:

// Doesn't throw an error because RouterLink has a "to" prop
<Button as={RouterLink} to="/">Click me!</Button>
Run Code Online (Sandbox Code Playgroud)

这是没有 TypeScript 的实现:

function Button({ as = "button", children, ...props }) {
  return React.createElement(as, props, children);
}
Run Code Online (Sandbox Code Playgroud)

那么,如何在传递 props 的同时使用 TypeScript 实现“as”props?

注意:我基本上是在尝试做该styled-components做的事情。但我们正在使用 CSS 模块和 SCSS,所以我无法添加样式组件。不过,我对更简单的替代方案持开放态度。

javascript typescript reactjs

15
推荐指数
1
解决办法
8197
查看次数

标签 统计

javascript ×1

reactjs ×1

typescript ×1