interface DeterminedExtraSerializer { determine: (value: any) => boolean; } export interface ExtraSerializer extends DeterminedExtraSerializer { serialize: (value: T) => S; deserialize: (serializedValue: S) => T; } export interface ConstantExtraSerializer extends DeterminedExtraSerializer { deserialize: () => T; } export interface RecursiveExtraSerializer extends ExtraSerializer { initialize: (created: T, serializedValue: S) => void; } export declare type UnifiedExtraSerializer = ConstantExtraSerializer | ExtraSerializer | RecursiveExtraSerializer; export declare function isExtraSerializer(serializer: UnifiedExtraSerializer): serializer is ExtraSerializer; export declare function isConstantExtraSerializer(serializer: UnifiedExtraSerializer): serializer is ConstantExtraSerializer; export declare function isRecursiveExtraSerializer(serializer: UnifiedExtraSerializer): serializer is RecursiveExtraSerializer; export declare type ExtraSerializerRef = {}; export declare type ExtraSerializerId = string; export declare type ExtraSerializersPreset = { [Id in ExtraSerializerId]: UnifiedExtraSerializer; }; export {};