コンパイラかく語りき

import { Fun } from 'programming'

yup で require なフィールドを持つオブジェクト自体を optional にする方法

スキーマバリデーションのライブラリである yup の話です。

以下のようなネストになったスキーマがあるとします。

yup.object({
  foo: yup.object({
    bar: yup.string.require()
  })
})

foo は require ではないので任意項目のはずです。しかし、内部の bar が require なため、 foo が存在しないとバリデーションエラーとなります。

以下のように、 default(undefined) を指定すれば OK

yup.object({
  foo: yup.object({
    bar: yup.string.require()
  }).default(undefined)
})

参考: https://github.com/jquense/yup/issues/772