import { AugmentedQuery } from '@polkadot/api/types';
import type { Observable } from '@polkadot/types/types';
import BigNumber from 'bignumber.js';
import { Entity, Procedure } from "../../internal";
export declare type Mutable<Immutable> = {
    -readonly [K in keyof Immutable]: Immutable[K];
};
export declare type ProcedureFunc<Args extends unknown, ReturnValue, Storage> = () => Procedure<Args, ReturnValue, Storage>;
export declare type UnionOfProcedureFuncs<Args extends unknown, ReturnValue, Storage> = Args extends unknown ? ProcedureFunc<Args, ReturnValue, Storage> : never;
/**
 * Less strict version of Parameters<T>
 */
export declare type ArgsType<T> = T extends (...args: infer A) => unknown ? A : never;
/**
 * Recursively traverse a type and transform its Entity properties into their
 *   human readable version (as if `.toJson` had been called on all of them)
 */
export declare type HumanReadableType<T> = T extends Entity<unknown, infer H> ? HumanReadableType<H> : T extends BigNumber ? string : T extends Date ? string : T extends object ? {
    [K in keyof T]: T[K] extends Entity<unknown, infer E> ? HumanReadableType<E> : HumanReadableType<T[K]>;
} : T;
/**
 * Extract the return type of a polkadot.js query function
 *
 * @example `QueryReturnType<typeof identity.authorizations>` returns `Option<Authorization>`
 */
export declare type QueryReturnType<T extends unknown> = T extends AugmentedQuery<'promise', infer Fun> ? ReturnType<Fun> extends Observable<infer R> ? R : never : never;
/**
 * Override T with the properties of R
 */
export declare type Modify<T, R> = Omit<T, keyof R> & R;
/**
 * Ensure a specific property of T is defined
 */
export declare type WithRequired<T, K extends keyof T> = T & {
    [P in K]-?: T[P];
};
/**
 * Pick a single property sfrom T and ensure it is defined
 */
export declare type Ensured<T, K extends keyof T> = Required<Pick<T, K>>;
/**
 * Create a literal tuple type from a list of arguments
 *
 * @param args - values to turn into a tuple
 */
export declare const tuple: <T extends unknown[]>(...args: T) => T;
//# sourceMappingURL=index.d.ts.map