代码之家  ›  专栏  ›  技术社区  ›  Alexander Zeitler

动态设置反作用钩子形式错误

  •  0
  • Alexander Zeitler  · 技术社区  · 1 年前

    我有一些 errors 验证后 react-hook-form 提交时:

    {
      "companyName": "Error for companyName",
      "addressLine": "Error for addressLine"
    }
    

    现在我想打电话 setError 如果中的属性 错误 匹配 field 形式为:

    Object.keys(errors).forEach((key) => {
      if (fields.some((field) => field === key)) {
        setError(key, {
          type: 'custom',
          message: errors[key]
        })
      }
    })
    

    代码有效,但我在中遇到编译器错误 setError 呼叫

    TS2345: Argument of type  string  is not assignable to parameter of type
    "companyName" | "addressLine"
    

    我试过了,但也没用:

    type Unionize<T extends object> = {
      [k in keyof T]: k
    }
    
    type Props = Unionize<{ companyName: string; addressLine: string}>
    

    然后进行注释 key 为类型 Props .

    1 回复  |  直到 1 年前
        1
  •  0
  •   Josh Kelley    1 年前

    这是因为 Object.keys returns a string[] in TypeScript 。请尝试添加显式强制转换。(您也可以从 Array.some Array.includes Array.indexOf .)

    Object.keys(errors).forEach((k) => {
      const key = k as keyof typeof errors;
      if (fields.includes(key)) {
        setError(key, {
          type: 'custom',
          message: errors[key]
        })
      }
    })