You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Joi.array().items()验证时是否要求数组必须包含至少一个元素

Joi array().items() 规则下空数组校验逻辑解答

核心结论

默认配置下,仅使用Joi.array().items(...)定义校验规则、未添加长度限制时,不会要求数组必须包含至少一个元素,空数组可以正常通过校验。

规则细节区分

很多开发者容易混淆两类校验规则的作用边界:

  • items(...)规则仅约束数组内存在的元素的类型,不对数组的长度做任何限制
  • 字段级的required()规则仅约束该字段不能为undefined/null,不限制数组本身的长度
  • 只有主动添加.min(1)规则时,才会要求数组至少包含1个元素,禁止空数组通过校验

校验示例

const Joi = require('joi');

// 场景1:仅定义元素类型规则
const noLimitSchema = Joi.array().items(Joi.string());
console.log(noLimitSchema.validate([]).error); // 无错误,空数组校验通过
console.log(noLimitSchema.validate(['test', 'demo']).error); // 无错误,符合预期
console.log(noLimitSchema.validate([123]).error); // 报错,数组元素类型不匹配

// 场景2:添加min(1)限制数组最小长度
const minLengthSchema = Joi.array().items(Joi.string()).min(1);
console.log(minLengthSchema.validate([]).error); // 报错,数组长度不能小于1

// 场景3:添加字段required规则
const requiredFieldSchema = Joi.object({
  list: Joi.array().items(Joi.string()).required()
});
console.log(requiredFieldSchema.validate({ list: [] }).error); // 无错误,空数组合法
console.log(requiredFieldSchema.validate({}).error); // 报错,list字段缺失

内容的提问来源于stack exchange,提问作者Justin Kruse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:18:02