You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-hook-form中register属性的类型定义问题求助

React Hook Form ^7.39.5 中为FormInput组件的register属性设置类型

你可以直接使用React Hook Form内置的UseFormRegisterReturn类型替代any,这个类型正是调用register(fieldName)后返回值的准确类型,完全匹配你的场景。

基础解决方案

修改FormInput.tsx中的类型定义,步骤如下:

  1. 从react-hook-form导入UseFormRegisterReturn类型
  2. 将FormInputProps里的register属性类型替换为该类型

修改后的完整代码:

import React from 'react';
import { UseFormRegisterReturn } from 'react-hook-form';
// 导入你的FormLayout和TextField组件

type FormInputProps = {
  label: string;
  register: UseFormRegisterReturn; // 替换原有的any类型
  errorMessage?: string;
  type?: string;
};

const FormInput = ({ label, register, errorMessage, type }: FormInputProps) => {
  return (
    <FormLayout errorMessage={errorMessage}>
      <TextField
        label={label}
        {...register}
        fullWidth
        size="small"
        type={type ?? undefined}
        error={!!errorMessage} // 简化错误判断逻辑
      />
    </FormLayout>
  );
};

export default React.memo(FormInput);

进阶:关联表单类型(可选)

如果希望register属性和你的表单类型FormInputs强绑定,让类型检查更严谨,可以给FormInput组件添加泛型:

import React from 'react';
import { UseFormRegisterReturn, FieldValues } from 'react-hook-form';
// 导入你的FormLayout和TextField组件

type FormInputProps<T extends FieldValues> = {
  label: string;
  register: UseFormRegisterReturn<T>;
  errorMessage?: string;
  type?: string;
};

const FormInput = <T extends FieldValues>({ label, register, errorMessage, type }: FormInputProps<T>) => {
  return (
    <FormLayout errorMessage={errorMessage}>
      <TextField
        label={label}
        {...register}
        fullWidth
        size="small"
        type={type ?? undefined}
        error={!!errorMessage}
      />
    </FormLayout>
  );
};

export default React.memo(FormInput);

使用组件时,泛型会自动从register的上下文推断出来,无需额外声明:

<FormInput
  label={label}
  register={{ ...register('firstName') }}
  errorMessage={errors['firstName']?.message}
/>

内容的提问来源于stack exchange,提问作者ertu68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:35:30