import { TASONSerializerOptions } from "./TASONSerializerOptions"; import { Constructor } from "type-fest"; export interface TASONScalarTypeInfo { kind: "scalar"; ctor: Constructor; /** * 同一 ctor 对应多个 TypeName 时(如 `bson.Binary` 的不同 subtype), * 再过滤一次。缺省只看 `instanceof ctor`。 */ match?: (value: T) => boolean; serialize?: (value: T, options: TASONSerializerOptions) => string; deserialize?: (value: string, options: TASONSerializerOptions) => T; } export interface TASONObjectTypeInfo { kind: "object"; ctor: T extends {} ? Constructor : never; match?: (value: T) => boolean; serialize?: (value: T, options: TASONSerializerOptions) => Partial & Record; deserialize?: (value: Readonly & Record>, options: TASONSerializerOptions) => T; } export type TASONTypeInfo = TASONScalarTypeInfo | TASONObjectTypeInfo; export type TASONNamedTypeInfo = TASONTypeInfo & { name: string; }; export declare function defineType(type: TASONTypeInfo): TASONTypeInfo;