Функция 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" }, ]});