是否可以要求一组已定义字段中的至少一个字段?

Is it possible to require at least one field from a set of defined fields?

给出这样的定义:

const querySchema = joi.object({
  one: joi.string().min(1).max(255),
  two: joi.string().min(1).max(255),
  three: joi.string().min(1).max(255),
});

有没有办法要求至少一个这些字段?我不在乎哪个。

注意:为此 提供的解决方案不适合我,因为我有 7 个字段并且它们可能会增长,所以做所有可能的组合是一个不行。

Joi API Reference 中找不到任何可能对这个用例有用的方法。

非常感谢任何帮助。

如果您真的不关心需要哪一个,那么您可以使用object().min(1).[=确保对象中至少有一个键。 16=]

const querySchema = joi.object({
    one: joi.string().min(1).max(255),
    two: joi.string().min(1).max(255),
    three: joi.string().min(1).max(255),
}).min(1);

至少需要一把钥匙(onetwothree)。名称与这三个不同的密钥将被拒绝。

除了@Ankh 建议的方法之外,在 documentation 中找到了另一种方法,但我之前找不到它:

const schema = joi.object({
   a: joi.number(),
   b: joi.number(),
}).or('a', 'b');

如果需要一组特定的键,这种方法很好,而当要求非常精确时,@Ankh 的方法更好,因为我这个问题标题并且你有很多键,所以我选择他的答案而不是我的作为正确的。

只是想以另一种方式离开这里。