Skip to main content

Функция schema()

Caution

При комбинации t.or() и объемных t.schema() без discriminateBy могут возникнуть проблемы с производительностью, используйте с осторожностью.

Информация

t.schema(schema, discriminateBy?): TCustomType
  • Функция t.schema() нужна для того, чтобы передать в t.or сложные структуры
  • t.schema() полезна при написании пользовательских типов

Примеры использования

import { Serializer, t } from "encodexx"
const serializer = new Serializer({
ages: [t.or(t.schema([t.uint8]), t.str)],
message: t.or(t.str, t.none)
})
serializer.encode({
ages: [[12], "493", "not a number", [124, 200]],
message: null
});

Сравнение схем между собой

При выборе схем функция t.or() автоматически определяет, к какому типу относится переданное значение, последовательно сопоставляя объект с каждой схемой. При множественных проверках сложных схем это может отрицательно сказаться на производительности. Рекомендуется указывать аргумент discriminateBy, чтобы сравнение выполнялось по конкретному полю.

import { Serializer, t } from "encodexx"
const serializer = new Serializer({
users: [
t.or(
t.schema({ name: t.str, type: t.enumerate("USER") }, "type"),
t.schema({ content: t.str, age: t.uint8, type: t.enumerate("ADMIN") }, "type")
),
],
});
serializer.encode({
users: [
{ name: "ad", type: "USER" },
{ content: "content", age: 15, type: "ADMIN" },
{ name: "another", type: "USER" },
]
});