Javascript Formik嵌套初始值、表单字段名和点符号? TL:DR

Javascript Formik嵌套初始值、表单字段名和点符号? TL:DR,javascript,reactjs,typescript,formik,Javascript,Reactjs,Typescript,Formik,在formik中,如果我有一个用点表示法写的字段名(例如name=“hands.left”),它链接到initialValue中嵌套对象的属性(例如hands:{left:,right:}),那么在使用验证错误(即访问对象属性)时如何使用该字段名(errors.hands.left和errors[“hands.left”]不起作用) 由于我的Typescript扩展接口定义,我有一个带有嵌套初始值的动态Formik表单,例如: <Formik initialValues={{

在formik中,如果我有一个用点表示法写的字段名(例如
name=“hands.left”
),它链接到initialValue中嵌套对象的属性(例如
hands:{left:,right:}
),那么在使用验证错误(即访问对象属性)时如何使用该字段名(
errors.hands.left
errors[“hands.left”]
不起作用)

由于我的Typescript扩展接口定义,我有一个带有嵌套初始值的动态Formik表单,例如:

<Formik
  initialValues={{
    description: "",
    specialist: "",
    discharge: {
      date: "",
      criteria: "",
    },
// ...
如果我尝试使用点符号(errors.discharge.date)访问错误,我会收到一条警告:“类型‘string’上不存在属性‘date’”

我的解决方案是将字段名从“Discharged.date”更改为“dischargeDate”:

它确实适用于错误对象,但会断开字段与初始值(Discharged>date)的连接,因此当我在字段中输入文本时,将创建一个新的单独变量“dischargeDate”,而不是更改嵌套对象值(dischargeDate)的状态:

命名字段以访问嵌套的initialValue(initialValues>discharge>date)和错误对象属性(errors.discharge.date)时,我应该怎么做?(errors.discharge.date)是重命名我的Typescript类型的唯一解决方案

interface BaseEntry {
  description: string;
  specialist: string;
}

interface Discharge {
  date: string;
  criteria: string;
}

export interface HospitalEntryType extends BaseEntry {
  discharge: Discharge;
}
从'formik'导入{formickerors};
接口基条目{
描述:字符串;
专家:弦;
}
界面放电{
日期:字符串;
标准:字符串;
}
导出接口HospitalEntryType扩展BaseEntry{
出院:出院;
}
接口FormValues扩展HospitalEntryType{}
验证=(值:FormValues)=>{
let errors:formickerors={};
const requireError=“字段为必填项”;
如果(!values.discharge.date){
错误={
出院:{
日期:requiredError
}
}
}
返回错误;
}
validate={(values) => {    
          const requiredError = "Field is required";
          const errors: { [field: string]: string } = {};   

          if (!values.discharge.date) {
            errors.discharge.date = requiredError;
          }
          // ...
      <Field
        name="dischargeDate"
        component={TextField}
      />
      if (!values.discharge.date) {
        errors.dischargeDate = requiredError;
      }
interface BaseEntry {
  description: string;
  specialist: string;
}

interface Discharge {
  date: string;
  criteria: string;
}

export interface HospitalEntryType extends BaseEntry {
  discharge: Discharge;
}
import { FormikErrors } from 'formik';

interface BaseEntry {
  description: string;
  specialist: string;
}

interface Discharge {
  date: string;
  criteria: string;
}

export interface HospitalEntryType extends BaseEntry {
  discharge: Discharge;
}

interface FormValues extends HospitalEntryType {}

validate = (values: FormValues) => {
  let errors: FormikErrors<FormValues> = {};
  const requiredError = "Field is required";
  
  if (!values.discharge.date) {
    errors = { 
      discharge: {
        date: requiredError
      }
    }
  }

  return errors;
}