將泛型類型傳遞給方法內部的對象

我想讓我的定制鉤子盡可能重復使用。

我想將泛型類型(因為對于不同的表單,我將有不同的錯誤字段)傳遞給我的const errors: Y = {};,它現在是空的,但可以作為帶有驗證錯誤的對象返回。

在第4行const errors: Y = {};中,我收到了一個錯誤:

類型“{}”不可分配給類型“Y”Y'可以用與'{}'.ts(2322無關的任意類型實例化)

CODESANDBOX DEMO: HERE

validate.ts:

export default function validate<T extends Record<string, string>, Y>(
  values: T
): Y {
  const errors: Y = {};

  if (!values.title) {
    errors.title = "Title is required";
  }

  return errors;
}

我使用validate方法的地方:

setErrors(validate<T, Y>(state));

function useFormState<T extends Record<string, string>, Y>(
  initialValue: T,
  initialErrors: Y
) {
  const [state, dispatch] = useReducer(
    (prevState: T, { name, value }: InputChangeEvent["target"]) => ({
      ...prevState,
      [name]: value
    }),
    initialValue
  );

  const [errors, setErrors] = useState<Y>(initialErrors);

  const handleSubmit = (evt: FormEvent) => {
    evt.preventDefault();
    setErrors(validate<T, Y>(state));
  };

  return [state, errors, handleSubmit] as const;
}

export default useFormState;

我試圖將不同的類型傳遞給這個方法const errors: ErrorValues = {};,但我有兩個不同的問題:

  1. 我的方法是不可重用的,因為我不能以不同的形式使用它。
  2. 當我想打電話給setErrors(validate(state));時,我收到了另一個錯誤:

“ErrorValues”類型的參數不能分配給“SetStateAction”類型的參數。類型“ErrorValues”不可分配給類型“(prevState:Y)=>Y”。類型“ErrorValues”不提供與簽名匹配的內容(prevState:Y):Y'.ts(2345

? 最佳回答:

也許你可以試試這個?在你的沙箱中暫時跳過這個代碼,看起來還可以

export default function validate<
  T extends Record<string, string>,
  Y extends Record<string, unkown>
>(values: T): Y {
  let errors: Y = {} as Y;

  if (!values.title) {
    errors = {
      ...errors,
      title: "Title is required ",
    };
  }

  return errors;
}
主站蜘蛛池模板: 成人久久精品一区二区三区| 日本精品无码一区二区三区久久久| 久久99精品一区二区三区| 91久久精品午夜一区二区| 国产伦精品一区二区免费| 男插女高潮一区二区| 一区二区中文字幕| 亚洲AV无码一区二区三区系列 | 综合激情区视频一区视频二区| 国产一区二区三区久久| 中文字幕一区二区三区精华液| 卡通动漫中文字幕第一区| 日本免费一区尤物| 免费看AV毛片一区二区三区 | 国产a∨精品一区二区三区不卡| 精品女同一区二区三区在线 | 久久精品国产一区二区三区| 日韩精品一区二区三区不卡| 波多野结衣中文一区二区免费| 无码aⅴ精品一区二区三区| 亚洲无码一区二区三区| 国产激情一区二区三区小说 | 亚洲AV无码一区二区二三区软件 | 激情亚洲一区国产精品| 国产精品制服丝袜一区| 无码一区二区三区免费视频| 久久久久人妻精品一区三寸| 日韩高清一区二区三区不卡| 国产在线一区视频| 久久精品综合一区二区三区| 国产成人AV一区二区三区无码| 亚洲AV无码第一区二区三区| 精品深夜AV无码一区二区| 亚洲精品精华液一区二区| 国产精品日韩一区二区三区| 精品国产亚洲一区二区在线观看| 日韩亚洲一区二区三区| 亚洲午夜一区二区三区| 美女AV一区二区三区| 精品一区二区三区四区| 97人妻无码一区二区精品免费|