import { Alias } from './alias';
import { DefaultValue } from './default-value';
import { Discriminant } from './discriminant';
import { InjectIndex } from './inject-index';
import { InjectOptions } from './inject-options';
import { PropertyName } from './property-name';
import { PropertyOptions } from './property-options';
import { SerializerCallback } from './serializer-callback';
import { TypeArgument } from './type-argument';
import { TypeOptionsBase } from './type-options-base';
/**
 * Type options interface.
 *
 * @type {TypeOptions<TObject>}
 */
export declare type TypeOptions<TObject> = Partial<TypeOptionsBase<TObject>> & {
    /**
     * Type alias.
     *
     * Can be used to resolve a type at runtime instead of type resolver function.
     *
     * @type {Alias}
     */
    alias?: Alias;
    /**
     * Default value for undefined ones.
     *
     * Used to set both serialized and deserialized default values and
     * only when use default value option is true.
     *
     * @type {DefaultValue}
     */
    defaultValue?: DefaultValue;
    /**
     * Serialized default value for undefined ones.
     *
     * Used only when use default value option is true.
     *
     * @type {DefaultValue}
     */
    serializedDefaultValue?: DefaultValue;
    /**
     * Deserialized default value for undefined ones.
     *
     * Used only when use default value option is true.
     *
     * @type {DefaultValue}
     */
    deserializedDefaultValue?: DefaultValue;
    /**
     * Serializer callback function to call before the serialization is started.
     * Can be an instance method name or a handler for which instance is provided.
     *
     * @type {SerializerCallback<TObject>}
     */
    beforeSerializeCallback?: SerializerCallback<TObject>;
    /**
     * Serializer callback function to call after the deserialization is completed.
     * Can be an instance method name or a handler for which instance is provided.
     *
     * @type {SerializerCallback<TObject>}
     */
    afterDeserializeCallback?: SerializerCallback<TObject>;
    /**
     * Discriminant.
     *
     * @type {Discriminant}
     */
    discriminant?: Discriminant;
    /**
     * Injectable type?
     *
     * @type {boolean}
     */
    injectable?: boolean;
    /**
     * Explicit array of type arguments to specify polymorphic serialization based
     * on implemented interfaces.
     *
     * @type {Array<TypeArgument<any>>}
     */
    parentTypeArguments?: Array<TypeArgument<any>>;
    /**
     * Inject options related to this type.
     *
     * @type {Map<InjectIndex, InjectOptions<any>>}
     */
    injectOptionsMap?: Map<InjectIndex, InjectOptions<any>>;
    /**
     * Property options related to this type. Map key is a property name.
     *
     * @type {Map<PropertyName, PropertyOptions<any>>}
     */
    propertyOptionsMap?: Map<PropertyName, PropertyOptions<any>>;
};
//# sourceMappingURL=type-options.d.ts.map