record
具有任意键的对象 —— 字典。所有值使用同一个 Schema 校验,键也可以选择性地校验。
签名
ts
function record<V>(value: Schema<V>, msg?: Message): Schema<Record<string, V>>
function record<K extends string, V>(key: Schema<K>, value: Schema<V>, msg?: Message): Schema<Record<K, V>>参数
| 参数 | 类型 | 说明 |
|---|---|---|
key | Schema<K> | 可选的键 Schema:pipe(string(), pattern(...))、oneOf([...]) |
value | Schema<V> | 值的 Schema |
msg | Message | 值为空或不是对象时的自定义信息 |
注意事项
- 键和值的错误关联到该键的路径:
errors.ab。 - 如果键的 Schema 会转换键(例如
toLowerCase),data中使用转换后的键。 - 只读取对象自身的键。来自 JSON 的
__proto__键是安全的 —— 它不会改变结果的原型。
错误代码
| 代码 | 触发条件 | 默认信息 |
|---|---|---|
required | 值为空 | Required |
object | 不是对象(或是数组) | Must be an object |
示例
翻译
ts
const title = record(oneOf(['ru', 'en', 'zh']), pipe(string(), maxLength(200)));
// Record<'ru' | 'en' | 'zh', string>
validate(title, { ru: 'Привет', en: 'Hello' }).valid; // true
validate(title, { de: 'Hallo' }).errors; // { de: 'Must be one of: ru, en, zh' }按商品 ID 的数量
ts
const cart = record(pipe(string(), pattern(/^\d+$/)), pipe(number(), integer(), min(1)));
validate(cart, { '15': 2, '42': 1 }).data; // { '15': 2, '42': 1 }