/**
 * setTimeout 类型
 */
type Timeout = ReturnType<typeof setTimeout>;
/**
 * setInterval 类型
 */
type Interval = ReturnType<typeof setInterval>;
/**
 * 允许null的泛型
 */
type Nullable<T> = T | null;
type AutoReconnect = {
    /**
     *重连尝试次数 默认 3
     */
    reconnectMaxCount?: number;
};
type Heartbeat = {
    /**
     * 心跳信息 默认`ping`
     */
    message: string;
    /**
     * 心跳间隔时间 默认 `3000` 毫秒
     */
    interval: number;
};
interface WSOptions {
    /**
     * 是否自动重连 默认`true`
     */
    autoReconnect: boolean | AutoReconnect;
    /**
     * 心跳 默认`false`
     */
    heartbeat: boolean | Heartbeat;
    /**
     * url 携带的参数
     */
    query: Record<string, string>;
}
declare class WS {
    url: string;
    socket: WebSocket | null;
    reconnectCount: number;
    delay: Nullable<Timeout>;
    timer: Nullable<Interval>;
    autoReconnect: WSOptions['autoReconnect'];
    heartbeat: WSOptions['heartbeat'];
    query: WSOptions['query'];
    constructor(url?: string, options?: WSOptions);
    /**
     * 连接
     */
    connect(): void;
    /**
     * 监听连接
     */
    onOpen(): void;
    /**
     * 开启心跳
     */
    startHeartbeat(): void;
    /**
     * 监听错误
     */
    onError(): void;
    /**
     * 关闭连接
     */
    close(): void;
    /**
     *  监听消息
     * @param callback
     */
    onMessage(callback: (...data: any[]) => any): void;
    /**
     * 发送消息
     * @param data
     */
    send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
}

export { WS, type WSOptions };
