import { FeatureValueType } from './models';
import { ClientContext } from './client_context';
export interface FeatureListener<T = any> {
    (featureChanged: FeatureStateHolder<T>): void;
}
export type FeatureListenerHandle = number;
export interface FeatureStateHolder<T = any> {
    getKey(): string | undefined;
    get key(): string | undefined;
    getString(): string | undefined;
    get str(): string | undefined;
    getBoolean(): boolean | undefined;
    getFlag(): boolean | undefined;
    get flag(): boolean | undefined;
    getNumber(): number | undefined;
    get num(): number | undefined;
    getRawJson(): string | undefined;
    get rawJson(): string | undefined;
    isSet(): boolean;
    get exists(): boolean;
    isLocked(): boolean | undefined;
    get locked(): boolean | undefined;
    isEnabled(): boolean;
    get enabled(): boolean;
    addListener(listener: FeatureListener<T>): FeatureListenerHandle;
    removeListener(handle: FeatureListener<T> | FeatureListenerHandle): any;
    triggerListeners(feature?: FeatureStateHolder<T>): void;
    get value(): T | undefined;
    getVersion(): number | undefined;
    get version(): number | undefined;
    getType(): FeatureValueType | undefined;
    get type(): FeatureValueType | undefined;
    withContext(param: ClientContext): FeatureStateHolder;
    get featureProperties(): Record<string, string> | undefined;
}
