import 'reflect-metadata';
import { List } from './List';
import { Optional } from './Types';
import { Entry } from './Object';
type MetaParseOptions = {
    initial?: any;
    skipUndefined?: boolean;
};
declare class ClassMeta {
    readonly subject: any;
    private readonly data;
    constructor(subject: any, data?: any);
    get: <T>(key: string) => T;
    set: <T>(key: string, value: T) => T;
    entries: <T = unknown>() => List<Entry<T>>;
    parse: <Out, Value>(f: (v: Value) => Out, options?: MetaParseOptions) => Record<string, Out>;
    properties: (key?: string) => List<PropertyMeta>;
    keys: <T = any>(key: string) => List<T>;
    values: <T = unknown>() => List<T>;
    property: (property: string | symbol) => PropertyMeta;
}
declare class PropertyMeta {
    readonly subject: any;
    readonly property: string | symbol;
    private readonly data;
    constructor(subject: any, property: string | symbol, data?: any);
    get value(): any;
    get: <T>(key: string) => Optional<T>;
    set: <T>(key: string, value: T) => T;
}
export declare const meta: (subject: unknown) => ClassMeta;
export {};
