我正在努力让Typescript中的类型判断为使用forwardRef并具有...rest属性.

例子:

import React from 'react'

interface InputWithLabelProps {
  label: string,
  [rest: string]: unknown,
}

const InputWithLabel = React.forwardRef<HTMLInputElement, InputWithLabelProps>(
  ({ label, ...rest }, ref) => (
    <>
      <label htmlFor="field">{label}</label>
      <input id="field" ref={ref} {...rest} />
    </>
  ),
)

export default InputWithLabel

这将为组件提供以下签名:

(alias) const InputWithLabel: React.ForwardRefExoticComponent<Pick<InputWithLabelProps, keyof InputWithLabelProps> & React.RefAttributes<HTMLInputElement>>
import InputWithLabel

这将不会提供正确的类型判断,例如,不需要提供所需的标签属性.如果我删除forwardRef或...rest属性它可以工作,但这不是一个选项.

如何在具有以下内容的组件上使用forwardRef...rest属性并同时进行类型判断?

推荐答案

使用[rest: string]: unknown可以将任何字符串属性传递给输入元素,而这(我不理解为什么)会使其他属性类型变得无用.假设您想使用强制label或属于<input>元素的任何props 来键入组件,您可以使用以下任一方法来扩展此功能:

interface InputWithLabelProps extends React.InputHTMLAttributes<HTMLInputElement> {
  label: string
}

或使用以下方式组合类型:

type InputWithLabelProps = {
    label: string
} & React.HTMLProps<HTMLInputElement>

Reactjs相关问答推荐

如何使用react-router-dom导航到网页中的其他路由?

呈现组件元素(MAP)中的问题

在一个地方调用函数会影响其他地方调用该函数

React:关于useEffect钩子如何工作的困惑

react 挂钩-使用有效澄清

自定义变量默认、聚焦和填充时所需TextField中标签的星号 colored颜色

如何在MUI x图表条形图上放置圆角?

console.logs 没有显示在浏览器控制台上,但显示在我的终端上

useRef.current.value 为空值

BrowserRouter改变了URL但没有链接到页面

React Native 背景动画反转

使用新数据更新时,React 不更新具有过滤功能的深层嵌套对象数组中的变量状态

Recharts 笛卡尔网格 - 垂直线和水平线的不同样式

Primereact 的日历组件在每个月 12 日之后使用非唯一键生成

如何在不重新加载页面的情况下加载新添加的数据?

Reactjs 表单未反映提交时的更改

React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

如何在 React JS 上使文本中的单词可点击

当页面重新加载react 路由导航到第一页 v6

如何在 React 中制作动画?