Skip to main content
Version: v2

Number

Describes number values:

import { number } from 'dynamodb-toolbox/schema/number'

const levelSchema = number()

type Level = FormattedValue<typeof levelSchema>
// => number

Properties

.required()

string | undefined

Tags schema values as required (within items or maps). Possible values are:

  • 'atLeastOnce' (default): Required (starting value)
  • 'always': Always required (including updates)
  • 'never': Optional
// Equivalent
const levelSchema = number()
const levelSchema = number().required()
const levelSchema = number({ required: 'atLeastOnce' })

// shorthand for `.required('never')`
const levelSchema = number().optional()
const levelSchema = number({ required: 'never' })

.hidden()

boolean | undefined

Omits schema values during formatting:

const levelSchema = number().hidden()
const levelSchema = number({ hidden: true })

.key()

boolean | undefined

Tags schema values as a primary key attribute or linked to a primary key attribute:

// Note: The method also sets the `required` property to 'always'
// (it is often the case in practice, you can still use `.optional()` if needed)
const levelSchema = number().key()
const levelSchema = number({
key: true,
required: 'always'
})

.savedAs(...)

string

Renames schema values during the transformation step (within items or maps):

const levelSchema = number().savedAs('lvl')
const levelSchema = number({ savedAs: 'lvl' })

.enum(...)

number[]

Provides a finite range of possible values:

const pokemonGenerationSchema = number().enum(1, 2, 3)

// 👇 Equivalent to `.enum(1).default(1)`
const pokemonGenerationSchema = number().const(1)
info

For type inference reasons, the enum option is only available as a method and not as input props.

.transform(...)

Transformer<number>

Allows modifying schema values during the transformation step:

const addOne = {
parse: (input: number) => input + 1,
format: (saved: number) => saved - 1
}

// Saves the value plus one
const levelSchema = number().transform(addOne)
const levelSchema = number({ transform: addOne })

DynamoDB-Toolbox exposes on-the-shelf transformers, so feel free to use them!

.big()

boolean | undefined

Allows BigInt values:

const levelSchema = number().big()
const levelSchema = number({ big: true })

type Level = FormattedValue<typeof levelSchema>
// => number | bigint

.default(...)

ValueOrGetter<number>

Specifies default values. See Defaults and Links for more details:

Examples
const levelSchema = number().default(42)
// 👇 Similar to
const levelSchema = number().putDefault(42)
// 👇 ...or
const levelSchema = number({ putDefault: 42 })

// 🙌 Getters also work!
const levelSchema = number().default(() => 42)

.link<Schema>(...)

Link<SCHEMA, number>

Similar to .default(...) but allows deriving the default value from other attributes. See Defaults and Links for more details:

const pokemonSchema = item({
level: number()
}).and(prevSchema => ({
captureLevel: number().link<typeof prevSchema>(
// 🙌 Correctly typed!
item => item.level
)
}))

.validate(...)

Validator<number>

Adds custom validation. See Custom Validation for more details:

Examples
const integerSchema = number().validate(input =>
Number.isInteger(input)
)
// 👇 Similar to
const integerSchema = number().putValidate(input =>
Number.isInteger(input)
)
// 👇 ...or
const integerSchema = number({
putValidator: input => Number.isInteger(input)
})