import { Alias } from '../alias';
import { CustomKey } from '../custom-key';
import { CustomValue } from '../custom-value';
import { DefaultValue } from '../default-value';
import { DefaultValueResolver } from '../default-value-resolver';
import { Discriminant } from '../discriminant';
import { Discriminator } from '../discriminator';
import { Factory } from '../factory';
import { InjectIndex } from '../inject-index';
import { InjectMetadata } from '../inject-metadata';
import { InjectOptions } from '../inject-options';
import { InjectSorter } from '../inject-sorter';
import { Injector } from '../injector';
import { Logger } from '../logger';
import { NamingConvention } from '../naming-convention';
import { NullValueResolver } from '../null-value-resolver';
import { Optional } from '../optional';
import { PropertyMetadata } from '../property-metadata';
import { PropertyName } from '../property-name';
import { PropertyOptions } from '../property-options';
import { PropertySorter } from '../property-sorter';
import { ReferenceHandler } from '../reference-handler';
import { Serializer } from '../serializer';
import { SerializerCallback } from '../serializer-callback';
import { TypeArgument } from '../type-argument';
import { TypeFn } from '../type-fn';
import { TypeMetadata } from '../type-metadata';
import { TypeState } from '../type-state';
/**
 * Represents unresolved type state.
 *
 * @type {UnresolvedTypeState<TObject>}
 */
export declare class UnresolvedTypeState<TObject> implements TypeState<TObject> {
    /**
     * Type metadata for which state is defined.
     *
     * @type {TypeMetadata<TObject>}
     */
    readonly typeMetadata: TypeMetadata<TObject>;
    /**
     * Resolved type state.
     *
     * @type {ResolvedTypeState<TObject>}
     */
    private resolvedTypeState?;
    /**
     * Constructor.
     *
     * @param {TypeMetadata<TObject>} typeMetadata Type metadata for which state is defined.
     */
    constructor(typeMetadata: TypeMetadata<TObject>);
    /**
     * Gets alias.
     *
     * @returns {Optional<Alias>} Alias.
     */
    get alias(): Optional<Alias>;
    /**
     * Gets custom value map.
     *
     * @returns {ReadonlyMap<CustomKey<any>, CustomValue>} Custom value map.
     */
    get customValueMap(): ReadonlyMap<CustomKey<any>, CustomValue>;
    /**
     * Gets serialized null value resolver.
     *
     * @returns {NullValueResolver} Serialized null value resolver.
     */
    get serializedNullValueResolver(): NullValueResolver;
    /**
     * Gets serialized default value.
     *
     * @returns {DefaultValue} Serialized default value.
     */
    get serializedDefaultValue(): DefaultValue;
    /**
     * Gets serialized default value resolver.
     *
     * @returns {DefaultValueResolver} Serialized default value resolver.
     */
    get serializedDefaultValueResolver(): DefaultValueResolver;
    /**
     * Gets deserialized null value resolver.
     *
     * @returns {NullValueResolver} Deserialized null value resolver.
     */
    get deserializedNullValueResolver(): NullValueResolver;
    /**
     * Gets deserialized default value.
     *
     * @returns {DefaultValue} Serialized default value.
     */
    get deserializedDefaultValue(): DefaultValue;
    /**
     * Gets deserialized default value resolver.
     *
     * @returns {DefaultValueResolver} Deserialized default value resolver.
     */
    get deserializedDefaultValueResolver(): DefaultValueResolver;
    /**
     * Gets before serialize callback.
     *
     * @returns {Optional<SerializerCallback<TObject>>} Before serialize callback.
     */
    get beforeSerializeCallback(): Optional<SerializerCallback<TObject>>;
    /**
     * Gets after deserialize callback.
     *
     * @returns {Optional<SerializerCallback<TObject>>} After deserialize callback.
     */
    get afterDeserializeCallback(): Optional<SerializerCallback<TObject>>;
    /**
     * Gets discriminant.
     *
     * @returns {Discriminant} Discriminant.
     */
    get discriminant(): Discriminant;
    /**
     * Gets discriminator.
     *
     * @returns {Discriminator} Discriminator.
     */
    get discriminator(): Discriminator;
    /**
     * Gets factory.
     *
     * @returns {Factory} Factory.
     */
    get factory(): Factory;
    /**
     * Gets injectable value.
     *
     * @returns {boolean} Injectable value.
     */
    get injectable(): boolean;
    /**
     * Gets injector.
     *
     * @returns {Injector} Injector.
     */
    get injector(): Injector;
    /**
     * Gets logger.
     *
     * @returns {Logger} Logger.
     */
    get logger(): Logger;
    /**
     * Gets naming convention.
     *
     * @returns {Optional<NamingConvention>} Naming convention.
     */
    get namingConvention(): Optional<NamingConvention>;
    /**
     * Gets indicator if current type metadata is polymorphic.
     *
     * @returns {boolean} Indicator if polymorphic.
     */
    get polymorphic(): boolean;
    /**
     * Gets type metadata map.
     *
     * @returns {ReadonlyMap<TypeFn<any>, TypeMetadata<any>>} Type metadata map.
     */
    get typeMetadataMap(): ReadonlyMap<TypeFn<any>, TypeMetadata<any>>;
    /**
     * Gets indicator if discriminator should be preserved.
     *
     * @returns {boolean} Preserve discriminator.
     */
    get preserveDiscriminator(): boolean;
    /**
     * Gets reference handler.
     *
     * @returns {ReferenceHandler} Reference handler.
     */
    get referenceHandler(): ReferenceHandler;
    /**
     * Gets serializer.
     *
     * @returns {Serializer<TObject>} Serializer.
     */
    get serializer(): Serializer<TObject>;
    /**
     * Gets indicator if null value should be preserved.
     *
     * @returns {boolean} Preserve null value.
     */
    get preserveNull(): boolean;
    /**
     * Gets indicator if default value should be used.
     *
     * @returns {boolean} Use default value.
     */
    get useDefaultValue(): boolean;
    /**
     * Gets indicator if implicit conversion should be used.
     *
     * @returns {boolean} Use implicit conversion.
     */
    get useImplicitConversion(): boolean;
    /**
     * Gets property sorter.
     *
     * @returns {Optional<PropertySorter>} Property sorter.
     */
    get propertySorter(): Optional<PropertySorter>;
    /**
     * Gets sorted property metadatas.
     *
     * @returns {ReadonlyArray<PropertyMetadata<TObject, any>>} Sorted property metadatas.
     */
    get sortedPropertyMetadatas(): ReadonlyArray<PropertyMetadata<TObject, any>>;
    /**
     * Gets inject sorter.
     *
     * @returns {Optional<InjectSorter>} Inject sorter.
     */
    get injectSorter(): Optional<InjectSorter>;
    /**
     * Gets sorted inject metadatas.
     *
     * @returns {ReadonlyArray<InjectMetadata<TObject, any>>} Sorted inject metadatas.
     */
    get sortedInjectMetadatas(): ReadonlyArray<InjectMetadata<TObject, any>>;
    /**
     * Gets parent type arguments.
     *
     * @returns {ReadonlyArray<TypeArgument<any>>} Parent type arguments.
     */
    get parentTypeArguments(): ReadonlyArray<TypeArgument<any>>;
    /**
     * Gets parent type metadatas.
     *
     * @returns {ReadonlyArray<TypeMetadata<any>>} Parent type metadatas.
     */
    get parentTypeMetadatas(): ReadonlyArray<TypeMetadata<any>>;
    /**
     * Gets own parent type metadatas.
     *
     * @returns {ReadonlyArray<TypeMetadata<any>>} Own parent type metadatas.
     */
    get ownParentTypeMetadatas(): ReadonlyArray<TypeMetadata<any>>;
    /**
     * Gets child type metadatas.
     *
     * @returns {ReadonlyArray<TypeMetadata<any>>} Child type metadatas.
     */
    get childTypeMetadatas(): ReadonlyArray<TypeMetadata<any>>;
    /**
     * Gets own child type metadatas.
     *
     * @returns {ReadonlyArray<TypeMetadata<any>>} Own child type metadatas.
     */
    get ownChildTypeMetadatas(): ReadonlyArray<TypeMetadata<any>>;
    /**
     * Gets property options map.
     *
     * @returns {ReadonlyMap<PropertyName, PropertyOptions<any>>} Property options map.
     */
    get propertyOptionsMap(): ReadonlyMap<PropertyName, PropertyOptions<any>>;
    /**
     * Gets property metadata map.
     *
     * @returns {ReadonlyMap<PropertyName, PropertyMetadata<TObject, any>>} Property metadata map.
     */
    get propertyMetadataMap(): ReadonlyMap<PropertyName, PropertyMetadata<TObject, any>>;
    /**
     * Gets own property metadata map.
     *
     * @returns {ReadonlyMap<PropertyName, PropertyMetadata<TObject, any>>} Own property metadata map.
     */
    get ownPropertyMetadataMap(): ReadonlyMap<PropertyName, PropertyMetadata<TObject, any>>;
    /**
     * Gets inject options map.
     *
     * @returns {ReadonlyMap<InjectIndex, InjectOptions<any>>} Inject options map.
     */
    get injectOptionsMap(): ReadonlyMap<InjectIndex, InjectOptions<any>>;
    /**
     * Gets inject metadata map.
     *
     * @returns {ReadonlyMap<InjectIndex, InjectMetadata<TObject, any>>} Inject metadata map.
     */
    get injectMetadataMap(): ReadonlyMap<InjectIndex, InjectMetadata<TObject, any>>;
}
//# sourceMappingURL=unresolved-type-state.d.ts.map