import { Indexable, JsonObject, JsonType, SerializablePrimitiveType, SerializableType } from "./interfaces";
/**
 * takes an indexable object ie `<T>{ [idx: string] : T }` and for each key serializes
     the object using the provided class type.
 * @param source - an indexable object
 * @param type - Type to serialize
 *
 * @return Indexable object of JsonType
 */
export declare function SerializeMap<T extends Indexable>(source: T, type: SerializableType<T>): Indexable<JsonType>;
/**
 * takes an array of objects and serializes each entry using the provided class type
 *
 * @param source - An array of objects
 * @param type - Type to serialize each entry of the array
 *
 * @return Array of JsonType
 */
export declare function SerializeArray<T>(source: Array<T>, type: SerializableType<T>): Array<JsonType>;
export declare function SerializePrimitive<T>(source: SerializablePrimitiveType, type: SerializablePrimitiveType): JsonType;
/**
 * takes any value and serializes it as json, no structure is assumed
    and any serialization annotations on any processed objects are totally ignored.
 * @param source
 * @param transformKeys
 *
 * @return JsonType
 */
export declare function SerializeJSON(source: any, transformKeys?: boolean): JsonType;
/**
 * takes a single object and serializes it using the provided class type.
 * @param instance - A single object to serialize
 * @param type - Type to serialize the instance
 *
 * @return A JsonObject or null
 */
export declare function Serialize<T>(instance: T, type: SerializableType<T>): JsonObject | null;
