import type { StringKey } from "../lang-utils";
export type AsyncSourceKey<T, K extends StringKey<T> = StringKey<T>> = `${K}$`;
export type ValidAsyncSourceKey<T, K extends StringKey<T> = StringKey<T>> = AsyncSourceKey<T, K> & StringKey<T>;
export declare namespace ComponentStateMetadata {
    interface ManagedProperty<T, K extends StringKey<T> = StringKey<T>> {
        key: K;
        publicKey?: StringKey<T>;
        asyncSource?: ValidAsyncSourceKey<T>;
    }
    type ManagedPropertyList<T> = ManagedProperty<T>[];
    const MANAGED_PROPERTY_LIST_KEY = "MANAGED_PROPERTY_LIST_KEY";
    function GetOwnManagedPropertyList<T>(target: Object): ManagedPropertyList<T>;
    function GetInheritedManagedPropertyList<T>(target: Object): ManagedPropertyList<T>;
    function SetManagedPropertyList<T>(target: Object, list: ManagedPropertyList<T>): void;
    function AddManagedProperty<T>(target: Object, property: ManagedProperty<T>): void;
}
export declare function asyncStateKey<ComponentT, K extends StringKey<ComponentT> = StringKey<ComponentT>>(key: K): AsyncSourceKey<ComponentT, K>;
