record

Creates a record schema.

const Schema = v.record<TKey, TValue, TMessage>(key, value, message);

Generics

Parameters

  • key TKey
  • value TValue
  • message TMessage

Explanation

With record you can validate the data type of the input and whether the entries matches key and value. If the input is not an object, you can use message to customize the error message.

This schema filters certain entries from the record for security reasons.

This schema marks an entry as optional if it detects that its key is a literal type. The reason for this is that it is not technically possible to detect missing literal keys without restricting the key schema to string, enum and picklist. However, if enum and picklist are used, it is better to use object with entriesFromList because it already covers the needed functionality. This decision also reduces the bundle size of record, because it only needs to check the entries of the input and not any missing keys.

Returns

Examples

The following examples show how record can be used.

String record schema

Schema to validate a record with strings.

const StringRecordSchema = v.record(
  v.string(),
  v.string(),
  'An object is required.'
);

Object record schema

Schema to validate a record of objects.

const ObjectRecordSchema = v.record(v.string(), v.object({ key: v.string() }));

Picklist as key

Schema to validate a record with specific optional keys.

const ProductRecordSchema = v.record(
  v.picklist(['product_a', 'product_b', 'product_c']),
  v.optional(v.number())
);

Enum as key

Schema to validate a record with specific optional keys.

enum Products {
  PRODUCT_A = 'product_a',
  PRODUCT_B = 'product_b',
  PRODUCT_C = 'product_c',
}

const ProductRecordSchema = v.record(v.enum(Products), v.optional(v.number()));

The following APIs can be combined with record.

Schemas

Methods

Actions

Utils

Contributors

Thanks to all the contributors who helped make this page better!

  • GitHub profile picture of fabian-hiller

Partners

Thanks to our partners who support the project ideally and financially.

Sponsors

Thanks to our GitHub sponsors who support the project financially.

  • GitHub profile picture of antfu
  • GitHub profile picture of Thanaen
  • GitHub profile picture of osdiab
  • GitHub profile picture of ruiaraujo012
  • GitHub profile picture of hyunbinseo
  • GitHub profile picture of F0rce
  • GitHub profile picture of Unique-Pixels
  • GitHub profile picture of jdgamble555
  • GitHub profile picture of nickytonline
  • GitHub profile picture of KubaJastrz
  • GitHub profile picture of caegdeveloper
  • GitHub profile picture of dslatkin