Yup으로 중첩된 객체 검증

4721 단어 TypeScriptYupRails
레일스가 말한 네스티드 attributes 같은 놈
{
  "title" => "title dayo",
  "body" => "body dayo",
  "tag_attributes" => {
    "0" => { "name" => "hoge" },
    "1" => { "name" => "fuga"}
  }
}
Yup.나는 lazy와 lodash의 맵 Values를 사용했다.
import * as Yup from "yup";
import mapValues from "lodash.mapvalues";

interface Form {
  title: string;
  body: string;
  tag_attributes: {
    [key: string]: {
      name: number;
    };
  };
}

const validationSchema = Yup.object().shape({
  title: Yup.string(),
  body: Yup.string(),
  tag_attributes: Yup.lazy<object>(obj =>
    Yup.object(
      mapValues(obj, () =>
        Yup.object().shape({
          name: Yup.string()
        })
      )
    )
  )
});
여기까지

참고 자료

  • Lodash Documentation
  • Example of dynamic object keys · Issue #130 · jquense/yup
  • ActiveRecord::NestedAttributes::ClassMethods
  • 좋은 웹페이지 즐겨찾기