/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
/**
 * Info integerIndexable needs to work.
 */
export interface IndexLookup<T> {
    read(index: number): T;
    write(index: number, value: T): boolean;
    readonly length: number;
}
/**
 * Class which can be indexed with integers from 0 to length -1 like arrays.
 * Unlike with arrays, this class asserts for out of bounds indexing on both read and write.
 *
 * @privateRemarks
 * This class works by returning a proxy from its constructor which
 * causes the derived class to get the proxy as its "this" object.
 */
export declare abstract class IntegerIndexable<in out T> {
    length: number;
    [x: number]: T;
    protected abstract read(index: number): T;
    protected abstract write(index: number, value: T): boolean;
    constructor(length: number);
}
export declare function integerIndexable<T, TTarget extends object>(outerTarget: TTarget, provider: IndexLookup<T>): {
    [x: number]: T;
} & TTarget;
//# sourceMappingURL=integerIndexable.d.ts.map