Типизация
Для удобной работы с encodexx
предусмотрены некоторые вспомогательные типы. Они помогают извлекать и преобразовывать типы схем и объектов для сериализации. Это может быть полезно как при написании пользовательских типов, так и при обычной работе с сериализатором.
ExtractObj
- Помогает извлечь тип объекта, который сериализует схема.
import { Serializer, t, ExtractObj } from "encodexx"
const serializer = new Serializer({ name: t.or(t.int8, t.string, t.date), role: t.enumerate("user", "admin", "guest"),})
type TSchemaType = ExtractObj<typeof serializer>
TSchemaType // { name: number | string | Date, role: "user" | "admin" | "guest" }
const obj: TSchemaType = { name: 12, role: "admin"}
serializer.encode(obj)
ArraySingle
- При создании схем в отдельных переменных может возникать ошибка связанная с неопределенным числом элементов в схемах. Чтобы её решить можно воспользоваться типомArraySingle
import { ArraySingle, t, Serializer } from "encodexx"const schema = { arr: [t.int8] }
new Serializer(schema as ArraySingle<typeof schema>)
TYPE_SYMBOL
- Символ, который присутствует во всех типах в объектеt
или созданных с помощьюcustomType()
.
import { t, TSchema, TYPE_SYMBOL } from "encodexx";
export function orNone<T extends TSchema>(type: T) { if (TYPE_SYMBOL in type) return t.or(t.none, type); return t.or(t.none, t.schema(type));}
TSchema
- Тип схемы. Может состоять как из единственного типа, так и быть сложной структурой.TConvertValueToType
- Помогает переводить тип схемы в тип объекта, который этой схемой обрабатывается.
import { t, TConvertValueToType } from "encodexx";
const schema = { name: t.str, enums: t.enumerate("A", "B", "C"),};
type TValue = TConvertValueToType<typeof schema>;TValue // { name: string, enums: "A" | "B" | "C" }