import { BaseSyncModel } from '../models/BaseSyncModel';
import type { ModelConfig } from '../types';
export declare function createListModel<T>(config: ModelConfig): new () => BaseSyncModel<T[]> & {
    add(item: T): number;
    remove(index: number): T | undefined;
    update(index: number, item: T): void;
    get(index: number): T | undefined;
    clear(): void;
    push(...items: T[]): number;
    pop(): T | undefined;
    shift(): T | undefined;
    unshift(...items: T[]): number;
    insertAt(index: number, item: T): void;
    removeAt(index: number): T | undefined;
    move(fromIndex: number, toIndex: number): void;
    swap(index1: number, index2: number): void;
    batchAdd(items: T[]): void;
    batchRemove(indices: number[]): void;
    batchUpdate(updates: Array<{
        index: number;
        item: T;
    }>): void;
    all: T[];
    size: number;
    isEmpty: boolean;
    first: T | undefined;
    last: T | undefined;
    indexOf(item: T): number;
    includes(item: T): boolean;
    find(predicate: (item: T, index: number) => boolean): T | undefined;
    findIndex(predicate: (item: T, index: number) => boolean): number;
    filter(predicate: (item: T, index: number) => boolean): T[];
    map<R>(mapper: (item: T, index: number) => R): R[];
    reduce<R>(reducer: (acc: R, item: T, index: number) => R, initial: R): R;
    sort(compareFn?: (a: T, b: T) => number): T[];
    reverse(): T[];
    slice(start?: number, end?: number): T[];
    getValue(): T[];
    setValue(value: T[]): void;
    toArray(): T[];
    forEach(callback: (item: T, index: number) => void): void;
    some(predicate: (item: T, index: number) => boolean): boolean;
    every(predicate: (item: T, index: number) => boolean): boolean;
    subscribeToIndex(index: number, callback: (item: T | undefined) => void): () => void;
    subscribeToLength(callback: (length: number) => void): () => void;
};
