import { StorageEntryMetadata as MetaV8 } from '../Metadata/v8/Storage';
import { AnyU8a } from '../types';
import Bytes from './Bytes';
export interface StorageEntry {
    (arg?: any): Uint8Array;
    headKey?: Uint8Array;
    meta: MetaV8;
    method: string;
    prefix: string;
    section: string;
    toJSON: () => any;
}
interface Decoded {
    key?: Uint8Array | string;
    method?: string;
    section?: string;
}
interface StorageKeyExtra {
    method: string;
    section: string;
}
/**
 * @name StorageKey
 * @description
 * A representation of a storage key (typically hashed) in the system. It can be
 * constructed by passing in a raw key or a StorageEntry with (optional) arguments.
 */
export default class StorageKey extends Bytes {
    private _meta?;
    private _method?;
    private _outputType?;
    private _section?;
    constructor(value?: AnyU8a | StorageKey | StorageEntry | [StorageEntry, any], override?: Partial<StorageKeyExtra>);
    static decodeStorageKey(value?: AnyU8a | StorageKey | StorageEntry | [StorageEntry, any]): Decoded;
    static getMeta(value: StorageKey | StorageEntry | [StorageEntry, any]): MetaV8 | undefined;
    static getType(value: StorageKey | StorageEntry | [StorageEntry, any]): string | undefined;
    /**
     * @description The metadata or `undefined` when not available
     */
    readonly meta: MetaV8 | undefined;
    /**
     * @description The key method or `undefined` when not specified
     */
    readonly method: string | undefined;
    /**
     * @description The output type, `null` when not available
     */
    readonly outputType: string | undefined;
    /**
     * @description The key section or `undefined` when not specified
     */
    readonly section: string | undefined;
}
export {};
