export interface Feature {
    get(name: 'refName'): string;
    get(name: 'start' | 'end'): number;
    get(name: 'subfeatures'): Feature[] | undefined;
    get(name: string): any;
    id(): string;
    parent(): Feature | undefined;
    children(): Feature[] | undefined;
    toJSON(): SimpleFeatureSerialized;
}
export declare function isFeature(thing: unknown): thing is Feature;
export interface SimpleFeatureArgs {
    data: Record<string, unknown>;
    parent?: Feature;
    id: string | number;
}
export interface SimpleFeatureSerializedNoId {
    [key: string]: unknown;
    parentId?: string;
    start: number;
    end: number;
    refName: string;
    type?: string;
    subfeatures?: SimpleFeatureSerializedNoId[];
}
export interface SimpleFeatureSerialized extends SimpleFeatureSerializedNoId {
    subfeatures?: SimpleFeatureSerializedNoId[];
    uniqueId: string;
}
export default class SimpleFeature implements Feature {
    private data;
    private subfeatures?;
    private parentHandle?;
    private uniqueId;
    constructor(args: SimpleFeatureArgs | SimpleFeatureSerialized);
    get(name: string): any;
    set(name: string, val: any): void;
    tags(): string[];
    id(): string;
    parent(): Feature | undefined;
    children(): Feature[] | undefined;
    toJSON(): SimpleFeatureSerialized;
    static fromJSON(json: SimpleFeatureSerialized): SimpleFeature;
}
