import { AbstractConstructor } from './Constructor';
import { Primitive } from './Primitive';
import { AsyncFunction } from './AsyncFunction';
/**
 * Extended types from `typeof`
 */
export declare type PrimitiveType = 'undefined' | 'null' | 'boolean' | 'number' | 'bigint' | 'string' | 'symbol' | 'function' | 'array' | 'object';
/**
 * For runtime type operations
 */
export declare class Type {
    /**
     * Improved `typeof value` function, accounts for null and arrays.
     * @param value The value to test.
     */
    static of(value: unknown): PrimitiveType;
    /**
     * Check if a value is an instance of a type
     * @param constructor The type
     * @param value The value
     */
    static isInstanceOf<T>(constructor: AbstractConstructor<T>, value: any): value is T;
    /**
     * Check if a value is null
     * @param value The value
     */
    static isNull(value: any): value is null;
    /**
     * Check if a value is undefined
     * @param value The value
     */
    static isUndefined(value: any): value is undefined;
    /**
     * Check if a value is a boolean
     * @param value The value
     */
    static isBoolean(value: any): value is boolean;
    /**
     * Check if a value is a number
     * @param value The value
     */
    static isNumber(value: any): value is number;
    /**
     * Check if a value is a BigInt
     * @param value The value
     */
    static isBigInt(value: any): value is BigInt;
    /**
     * Check if a value is a string
     * @param value The object
     */
    static isString(value: any): value is string;
    /**
     * Check if a value is a function
     * @param value The value
     */
    static isFunction(value: any): value is Function;
    /**
     * Check if a value is a symbol
     * @param value The value
     */
    static isSymbol(value: any): value is symbol;
    /**
     * Check if a value is a generator function
     * @param value The value
     */
    static isGeneratorFunction(value: any): value is GeneratorFunction;
    /**
     * Check if a value is an async function
     * @param value The value
     */
    static isAsyncFunction(value: any): value is AsyncFunction<any>;
    /**
     * Check if a value is a promise
     * @param value The value
     */
    static isPromise(value: any): value is Promise<any>;
    /**
     * Check if a value is a proxy
     * @param value The value
     */
    static isProxy(value: any): value is typeof Proxy;
    /**
     * Check if a value is a regular expression
     * @param value The value
     */
    static isRegExp(value: any): value is RegExp;
    /**
     * Check if a value is an iterable
     * @param value The value
     */
    static isIterable(value: any): value is Iterable<any>;
    /**
     * Check if a value is an async iterable
     * @param value The value
     */
    static isAsyncIterable(value: any): value is AsyncIterable<any>;
    /**
     * Check if a value is an array
     * @param value The value
     */
    static isArray(value: unknown): value is ReadonlyArray<any>;
    /**
     * Check if a value is array like
     * @param value The value
     */
    static isArrayLike(value: unknown): value is ArrayLike<any>;
    /**
     * Check if a value is a non-null object
     * @param value The value
     */
    static isObject(value: unknown): value is NonNullable<object>;
    /**
     * Check if a value is a class
     * @param value The value
     */
    static isClass(value: unknown): value is object;
    /**
     * Check if an object is a primitive
     * @param value The value
     */
    static isPrimitive(value: unknown): value is Primitive;
    static hasKeysOf<T extends object>(value: unknown, expectedKeys: ReadonlyArray<keyof T> | ReadonlyMap<keyof T, PrimitiveType>): value is T;
}
