3

Joi ライブラリを使用してオブジェクトを検証しています。別のオプション プロパティ (同じオブジェクトの同じレベルにある) が特定の型 (文字列など) である場合に、特定のプロパティを必須にしたいと考えています。Joi のドキュメントには、次の例が示されています。

const schema = {
    a: Joi.when('b', { is: true, then: Joi.required() }),
    b: Joi.boolean()
};

ただし、b (たとえば) が true であることを確認するのではなく、文字列であるかどうかを確認したいと思います。私はこれを試しました:

const schema = {
    a: Joi.when('b', { is: Joi.string(), then: Joi.required() }),
};

しかし、うまくいかないようです。オブジェクトから b を完全に削除しても、 Joi はまだ a が必要であると予想しているようです。b がオブジェクトに含まれていない場合、a に検証を適用したくありません。

これを行っている人々の他の例を見つけることができません-誰か助けてもらえますか?

4

1 に答える 1

0

object.withを使用してこれを解決することができました。1 つのキーが存在する場合 (例: a)、そのピアも存在する必要があります (例: b)。

ただし、a が Joi.string() であることを指定することはできましたが、object.with はその型ではなく単なる存在を探しているため、理想的ではありません。したがって、非文字列 a が存在する場合、「文字列である必要があります」というエラーが a に対してスローされます。a が文字列でなくてもまったく問題ありません。意味するのは、b が必須ではないということだけです。それが理にかなっていることを願っています。

于 2016-10-21T06:13:40.060 に答える