Skip to content

Field

const Field: object

Defined in: define/field/index.ts:80

A factory object for creating field definitions for table schemas.

any(options): FieldDefinition<any>

Defines an any field, which can store any data type.

FieldOptions = {}

Options for the any field.

FieldDefinition<any>

flexibleData: Field.any()

array<TElementDef>(element, options): FieldDefinition<InferFieldType<TElementDef>[]>

Defines an array field.

TElementDef extends FieldDefinition<unknown>

TElementDef

The field definition for the elements within the array.

ArrayFieldOptions<InferFieldType<TElementDef>> = {}

Options for the array field, such as max size.

FieldDefinition<InferFieldType<TElementDef>[]>

// An array of strings
tags: Field.array(Field.string()),
// An array of objects
items: Field.array(Field.object({
name: Field.string(),
quantity: Field.number(),
}))

bool(options): FieldDefinition<boolean>

Defines a boolean field.

FieldOptions = {}

Standard field options.

FieldDefinition<boolean>

Field.bool({ default: false })

bytes(options): FieldDefinition<ArrayBuffer>

Defines a bytes field for storing binary data.

FieldOptions = {}

Options for the bytes field.

FieldDefinition<ArrayBuffer>

avatar: Field.bytes()

custom<T>(typeString, options): FieldDefinition<T>

Defines a custom field type using a specific SurrealDB type string. This is useful for types not built-in to the ORM, like duration or geometry.

T

string

The SurrealQL type string (e.g., ‘duration’, ‘geometry’).

CustomFieldOptions = {}

Standard field options.

FieldDefinition<T>

Field.custom<number>('duration')

datetime(options): FieldDefinition<Date>

Defines a datetime field.

FieldOptions = {}

Standard field options.

FieldDefinition<Date>

Field.datetime({ default: 'time::now()' })

decimal(options): FieldDefinition<Decimal>

Defines a decimal field for high-precision numbers.

FieldOptions = {}

Options for the decimal field.

FieldDefinition<Decimal>

balance: Field.decimal()

duration(options): FieldDefinition<Duration>

Defines a duration field for storing time durations.

FieldOptions = {}

Options for the duration field.

FieldDefinition<Duration>

ttl: Field.duration()

float(options): FieldDefinition<number>

Defines a float field for floating-point numbers.

FieldOptions = {}

Options for the float field.

FieldDefinition<number>

rating: Field.float()

geometry<T>(type, options): FieldDefinition<GeometryTypeMap[T]>

Defines a geometry field for storing GeoJSON data.

T extends GeometryType

T

The specific geometry type.

FieldOptions = {}

Options for the geometry field.

FieldDefinition<GeometryTypeMap[T]>

// A single point
location: Field.geometry('point'),

int(options): FieldDefinition<number>

Defines an int field for integers.

FieldOptions = {}

Options for the int field.

FieldDefinition<number>

views: Field.int()

number(options): FieldDefinition<number>

Defines a number field (integer or float).

FieldOptions = {}

Standard field options.

FieldDefinition<number>

Field.number({ default: 0 })

object<TSchema>(schema, options): FieldDefinition<InferShapeFromFields<TSchema>>

Defines an object field with a nested schema.

TSchema extends Record<string, FieldDefinition<unknown>>

TSchema

An object defining the shape of the nested object.

ObjectFieldOptions = {}

Options for the object field, such as flexible.

FieldDefinition<InferShapeFromFields<TSchema>>

meta: Field.object({
views: Field.number(),
lastVisited: Field.datetime(),
})

option<FD>(fieldDefinition): FieldDefinition<undefined | InferFieldType<FD>>

Makes a field optional. In SurrealDB, fields are required by default. Wrapping a field definition with option() makes it optional.

FD extends FieldDefinition<unknown>

FD

The field definition to make optional.

FieldDefinition<undefined | InferFieldType<FD>>

bio: Field.option(Field.string())

record<TModel>(tableClassThunk, options): FieldDefinition<InstanceType<TModel> | RecordId<TModel["_tableName"]>>

Defines a record field, which creates a standard Record Link to a record in another table. This stores a RecordId (a pointer). It does NOT use the experimental REFERENCE feature and does not provide automatic referential integrity. If the linked record is deleted, this field will hold a dangling reference.

TModel extends AnyModelClass

() => TModel

A thunk () => ModelClass returning the model being referenced. This is required to prevent circular dependencies.

RecordFieldOptions = {}

Options for the record field.

FieldDefinition<InstanceType<TModel> | RecordId<TModel["_tableName"]>>

// Creates a link to a User record.
author: Field.record(() => User)

set<TElementDef>(element, options): FieldDefinition<Set<InferFieldType<TElementDef>>>

Defines a set field, which is a collection of unique values.

TElementDef extends FieldDefinition<unknown>

TElementDef

The field definition for the elements within the set.

ArrayFieldOptions<InferFieldType<TElementDef>> = {}

Options for the set field.

FieldDefinition<Set<InferFieldType<TElementDef>>>

// A set of unique tags
tags: Field.set(Field.string())

string(options): FieldDefinition<string>

Defines a string field.

FieldOptions = {}

Standard field options.

FieldDefinition<string>

Field.string({ assert: '$value.length > 0' })

uuid(options): FieldDefinition<Uuid>

Defines a uuid field.

FieldOptions = {}

Options for the uuid field.

FieldDefinition<Uuid>

uniqueId: Field.uuid()