Функции для создания типов
Обертка в виде функции позволит вам использовать замыкание при создании пользовательских типов, что открывает огромный спектр возможных использований для пользовательских типов.
Примеры использования
- Добавление тэга
import { customType } from "encodexx"
export function strWithTag(tag: string) { return customType<string>({ encode(buffer, str) { buffer.writeString(tag + str); }, decode(buffer) { return buffer.readString(); }, guard(data) { return typeof data === "string"; }, name: "stringWithTag " + tag, });}
import { Serializer } from "encodexx"
import { strWithTag } from "./str-with-tag.ts"
const serializer = new Serializer({ name: strWithTag("Dr. ")})
const encoded = serializer.encode({ name: "House"})
console.log(serializer.decode(encoded)) // {name: "Dr. House"}
Caution
Для правильного сравнения схем в методе .equal()
вы должны использовать уникальное имя для каждого уникального типа, так что в примере мы добавляем к имени типа tag
- type или t.none
import { customType, TConvertValueToType } 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));}
Что дальше?
Более сложный пример использования функций для создания типов вы можете посмотреть в примерах