Skip to content

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>>

参数 ​

参数类型说明
keySchema<K>可选的键 Schema:pipe(string(), pattern(...))、oneOf([...])
valueSchema<V>值的 Schema
msgMessage值为空或不是对象时的自定义信息

注意事项 ​

  • 键和值的错误关联到该键的路径: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 }

另请参阅 ​