Types
Superstruct exposes factory functions for a variety of common JavaScript (and TypeScript) types. You can also define your own custom validation functions using the struct factory.
any
anyany()'valid'
42
true
undefined
null
{
also: 'valid'
}any structs accept any value as valid.
🤖 Note that if you're using TypeScript, the
anystruct will loosen the type toany, and you might want to useunknowninstead.
array
arrayarray(number())
array(object({ id: number() }))[1, 2, 3]
[{ id: 1 }]array structs accept a list of values of a specific type.
bigint
bigintbigint structs validate that a value is a bigint.
boolean
booleanboolean structs accept the boolean values true and false.
date
datedate structs accept JavaScript Date instances.
🤖 To avoid unexpected runtime errors,
datestructs do not accept invalidDateobjects, even though they are technically an instance of aDate. This meshes with the 99% use case where invalid dates create inconsistencies.
enums
enumsenums structs validate that a value is one of a specific set of literals values.
func
funcfunc structs validate that a value is a function.
instance
instanceinstance structs validate that a value is an instance of a particular class, using JavaScript's built-in instanceof operator.
integer
integerinteger structs validate that a value is an integer.
intersection
intersectionintersection structs validate that a value matches all of many structs. It takes existing struct objects as arguments.
literal
literalliteral structs enforce that a value matches an exact value using the === operator.
map
mapmap structs validate that a value is a Map object with specific types for its keys and values.
🤖 When defining a key/value schemas with
mapit will traverse all the properties to ensure they are valid! If you don't care about validating the properties of the map, you can writemap()instead.
never
nevernever structs will fail validation for every value.
number
numbernumber structs validate that a value is a number.
nullable
nullablenullable structs validate that a value matches a specific struct, or that it is null.
object
objectobject structs validate that a value is an object and that each of its properties match a specific type as well.
🤖 Note that
objectstructs throw errors if they encounter extra properties on an object, unlessmaskis used! If you want to be less strict and ignore any extra properties, usetypeinstead. For other more complex object use cases, check out the coercions and utilities too.
optional
optionaloptional structs validate that a value matches a specific struct, or that it is undefined.
🤖 Warning: If you are using TypeScript, you must enable TypeScript's
strictNullChecksoption in yourtsconfig.jsonfor Superstruct to work properly with "optional" types. Note thatstrictNullChecksis disabled by default. If you enablestrict,strictNullCheckswill automatically be enabled.
record
recordrecord structs validate an object with specific types for its keys and values. But, unlike object structs, they do not enforce a specific set of keys.
regexp
regexpregexp structs validate that a value is a RegExp object.
🤖 This does not test the value against the regular expression! For that you want the
patternrefinement.
set
setset structs validate that a value is a Set instance with elements of a specific type.
🤖 When defining a child schema with
setit will traverse all the children to ensure they are valid! If you don't care about validating the elements of the set, you can writeset()instead.
string
stringstring structs validate that a value is a string.
tuple
tupletuple structs validate that a value is an array of a specific length with values each of a specific type.
type
typetype structs validate that a value has a set of properties on it, but it does not assert anything about unspecified properties. This allows you to assert that a particular set of functionality exists without a strict equality check for properties.
When mask() is used with a value of type, its unknown properties are not removed. I.e. consider type as a signal to the core that the object may have arbitrary properties in addition to the known ones, in both masked and non-masked validation.
🤖 If you want to throw errors when encountering unknown properties, use
objectinstead.
union
unionunion structs validate that a value matches at least one of many types.
unknown
unknownunknown structs accept unknown value as valid without loosening its type to any.
Custom Types
You can also define your own custom structs that are specific to your application's requirements, like so:
Custom types take validator functions that return either true/false or an array of StructFailure objects, in case you want to build more helpful error messages.
🤖 If you are using Typescript the value will be of type
unknownby default. You can pass a more specific type for Typescript:
Last updated