[Egret]微信小游戲.d.ts

gitee地址:https://gitee.com/FanMax/rose
github地址:https://github.com/pony13500815917/rose

  • .d.ts 使用舉例
/**
 * 微信小游戲工具類
 */
class WxGameUtil {

    /**
     * 監(jiān)聽小游戲回到前臺(tái)的事件
     * 可將此監(jiān)聽放在Main createChildren 中開啟
     */
    public static onShow() {
        wx.onShow(function (option) {
            console.log("監(jiān)聽小游戲回到前臺(tái)的事件......");
            console.log(option);
            console.log("-----監(jiān)聽小游戲End......-----");
        });
    }

    /**
     * 登陸 - 獲取Code
     */
    public static async login() {
        return new Promise(function (resolve, reject) {
            wx.login({
                success(res) {
                    resolve(res);
                }
            })
        });
    }

    /**
     * 獲取用戶信息 - 創(chuàng)建授權(quán)按鈕
     */
    public static async getUserInfo() {
        return new Promise((resolve, reject) => {
            let sysInfo = wx.getSystemInfoSync();
            let sdkVersion = sysInfo.SDKVersion;
            sdkVersion = sdkVersion.replace(/\./g, "");
            sdkVersion = sdkVersion.substr(0, 3);
            let sdkVersionNum = parseInt(sdkVersion);
            // 判斷是否已經(jīng)授權(quán) - 并且兼容 2.0.1 以前版本獲取
            wx.getSetting({
                success(res) {
                    if (sdkVersionNum >= 201 && !res.authSetting['scope.userInfo']) {
                        // 創(chuàng)建獲取用戶信息按鈕
                        var button = wx.createUserInfoButton({
                            type: 'image',
                            text: '',
                            image: "http://www.oneh5.com/iptv/h5/egret/billiard/resource/game/jiqiu.png",
                            style: {
                                left: 0,
                                top: 0,
                                width: 100,
                                height: 100
                            }
                        });
                        button.onTap((res) => {
                            if (res.userInfo) {
                                console.log("用戶授權(quán):", res);
                                var userInfo = res.userInfo;
                                var nickName = userInfo.nickName;
                                var avatarUrl = userInfo.avatarUrl;
                                var gender = userInfo.gender; //性別 0:未知、1:男匣屡、2:女
                                var province = userInfo.province;
                                var city = userInfo.city;
                                var country = userInfo.country;
                                button.destroy();
                                resolve(userInfo);
                            } else {
                                wx.showModal({
                                    title: '友情提醒',
                                    content: '請(qǐng)?jiān)试S微信獲得授權(quán)!',
                                    showCancel: false,
                                    cancelColor: '#000000',
                                    confirmText: '確定',
                                    confirmColor: '#3cc51f'
                                });
                            }
                        });
                    } else {
                        // 已授權(quán) - 直接獲取
                        wx.getUserInfo({
                            withCredentials: true,
                            success: res => {
                                var userInfo = res.userInfo;
                                var nickName = userInfo.nickName;
                                var avatarUrl = userInfo.avatarUrl;
                                var gender = userInfo.gender; //性別 0:未知卷哩、1:男、2:女
                                var province = userInfo.province;
                                var city = userInfo.city;
                                var country = userInfo.country;
                                resolve(userInfo);
                            },
                            fail: res => {
                                wx.showModal({
                                    title: '友情提醒',
                                    content: '請(qǐng)?jiān)试S微信獲得授權(quán)!',
                                    showCancel: false,
                                    cancelColor: '#000000',
                                    confirmText: '確定',
                                    confirmColor: '#3cc51f'
                                });
                            }
                        });
                    }
                }
            });
        })
    }

    /**
     * 設(shè)置默認(rèn)分享
     */
    public static setDefaultShare() {
        // 開啟分享
        wx.showShareMenu({
            withShareTicket: true
        });
        wx.onShareAppMessage(function () {
            return {
                title: '分享',
                imageUrl: ''
            }
        });
    }

    /**
     * 主動(dòng)分享
     */
    public static shareGame(object) {
        wx.shareAppMessage({
            title: object.title,
            imageUrl: object.image,
            query: object.query
        })
    }
}
  • [文件] 微信小游戲.d.ts
  • 將下面代碼放在.d.ts后綴文件中,放入項(xiàng)目libs中即可調(diào)用蔬咬,使用方法可參考微信小游戲API
/**
 * 取消一個(gè)先前通過調(diào)用 requestAnimationFrame 方法添加到計(jì)劃中的動(dòng)畫幀請(qǐng)求
 */
declare function cancelAnimationFrame(requestID: number): void;

/**
 * 在下次進(jìn)行重繪時(shí)執(zhí)行曹动。
 */
declare function requestAnimationFrame(callback: () => void): number;

/** 輸出日志*/
interface Console {
    debug(message?: any, ...optionalParams: any[]): void;
    error(message?: any, ...optionalParams: any[]): void;
    group(groupTitle?: string, ...optionalParams: any[]): void;
    groupEnd(): void;
    info(message?: any, ...optionalParams: any[]): void;
    log(message?: any, ...optionalParams: any[]): void;
    warn(message?: any, ...optionalParams: any[]): void;
}

/** 輸出日志*/
declare var Console: {
    prototype: Console;
    new(): Console;
};

declare var console: Console;
/**
 * 可取消由 setTimeout() 方法設(shè)置的定時(shí)器。
 */
declare function clearTimeout(timeoutID: number): void;

/**
 * 可取消由 setInterval() 方法設(shè)置的定時(shí)器饰恕。
 */
declare function clearInterval(intervalID: number): void;

/**
 * 設(shè)定一個(gè)定時(shí)器挠羔,在定時(shí)到期以后執(zhí)行注冊(cè)的回調(diào)函數(shù)
 * @param callback 回調(diào)函數(shù)
 * @param delay 延遲的時(shí)間,函數(shù)的調(diào)用會(huì)在該延遲之后發(fā)生埋嵌,單位 ms破加。
 * @param rest param1, param2, ..., paramN 等附加參數(shù),它們會(huì)作為參數(shù)傳遞給回調(diào)函數(shù)雹嗦。
 * @returns number定時(shí)器的編號(hào)范舀。這個(gè)值可以傳遞給 clearTimeout 來取消該定時(shí)合是。
 */
declare function setTimeout(callback: () => void, delay: number, ...rest): number;

/**
 * 設(shè)定一個(gè)定時(shí)器,按照指定的周期(以毫秒計(jì))來執(zhí)行注冊(cè)的回調(diào)函數(shù)
 * @param callback 回調(diào)函數(shù)
 * @param delay 執(zhí)行回調(diào)函數(shù)之間的時(shí)間間隔锭环,單位 ms聪全。
 * @param rest param1, param2, ..., paramN 等附加參數(shù),它們會(huì)作為參數(shù)傳遞給回調(diào)函數(shù)辅辩。
 * @returns number定時(shí)器的編號(hào)难礼。這個(gè)值可以傳遞給 clearTimeout 來取消該定時(shí)。
 */
declare function setInterval(callback: () => void, delay: number, ...rest): number;

/**
 * 微信小游戲命名空間
 */
declare namespace wx {

    type ENV = {
        USER_DATA_PATH: string;
    }

    var env: ENV;

    type systemInfo = {
        /** 手機(jī)品牌*/
        brand: string;
        /** 手機(jī)型號(hào)*/
        model: string;
        /** 設(shè)備像素比 */
        pixelRatio: number;
        /** 屏幕寬度*/
        screenWidth: number;
        /** 屏幕高度*/
        screenHeight: number;
        /** 可使用窗口寬度*/
        windowWidth: number;
        /** 可使用窗口高度*/
        windowHeight: number;
        /** 狀態(tài)欄的高度*/
        statusBarHeight: number;
        /** 微信設(shè)置的語言*/
        language: string;
        /** 微信版本號(hào)*/
        version: string;
        /** 操作系統(tǒng)版本*/
        system: string;
        /** 客戶端平臺(tái)*/
        platform: string
        /** 用戶字體大小設(shè)置玫锋。以“我-設(shè)置 - 通用 - 字體大小”中的設(shè)置為準(zhǔn)蛾茉,單位 px。*/
        fontSizeSetting: number;
        /** 客戶端基礎(chǔ)庫版本*/
        SDKVersion: string;
        /** 性能等級(jí)*/
        benchmarkLevel: number;
    }

    type launchOption = {
        /** 啟動(dòng)小游戲的場(chǎng)景值*/
        scene: number;
        /** 啟動(dòng)小游戲的 query 參數(shù) */
        query: Object;
        /** 當(dāng)前小游戲是否被顯示在聊天頂部*/
        referrerInfo: ReferrerInfo
        /** shareTicket景醇,詳見獲取更多轉(zhuǎn)發(fā)信息*/
        shareTicket: string;
    }

    type ReferrerInfo = {
        /** 來源小程序或公眾號(hào)或App的 appId    */
        appId: string,
        /**  來源小程序傳過來的數(shù)據(jù)臀稚,scene=1037或1038時(shí)支持*/
        extraData: any
    }

    /**
     * UpdateManager 對(duì)象,用來管理更新三痰,可通過 wx.getUpdateManager 接口獲取實(shí)例吧寺。
     */
    type UpdateManager = {
        /**
         * 強(qiáng)制小程序重啟并使用新版本。在小程序新版本下載完成后(即收到 onUpdateReady 回調(diào))調(diào)用散劫。
         */
        applyUpdate(): void;
        /**
         * 監(jiān)聽向微信后臺(tái)請(qǐng)求檢查更新結(jié)果事件稚机。微信在小程序冷啟動(dòng)時(shí)自動(dòng)檢查更新,不需由開發(fā)者主動(dòng)觸發(fā)获搏。
         * @param callback 向微信后臺(tái)請(qǐng)求檢查更新結(jié)果事件的回調(diào)函數(shù)
         */
        onCheckForUpdate(callback: (res: { hasUpdate: boolean }) => void): void;
        /**
         * 監(jiān)聽小程序有版本更新事件赖条。客戶端主動(dòng)觸發(fā)下載(無需開發(fā)者觸發(fā))常熙,下載成功后回調(diào)
         * @param callback 小程序有版本更新事件的回調(diào)函數(shù)
         */
        onUpdateReady(callback: () => void): void;
        /**
         * 監(jiān)聽小程序更新失敗事件纬乍。小程序有新版本,客戶端主動(dòng)觸發(fā)下載(無需開發(fā)者觸發(fā))裸卫,下載失敺卤帷(可能是網(wǎng)絡(luò)原因等)后回調(diào)
         * @param callback 小程序更新失敗事件的回調(diào)函數(shù)
         */
        onUpdateFailed(callback: () => void): void;
    }

    /**
     * 在觸控設(shè)備上的觸摸點(diǎn)。通常是指手指或者觸控筆在觸屏設(shè)備或者觸摸板上的操作墓贿。
     */
    type Touch = {
        /** Touch 對(duì)象的唯一標(biāo)識(shí)符茧泪,只讀屬性。一次觸摸動(dòng)作(我們值的是手指的觸摸)在平面上移動(dòng)的整個(gè)過程中, 該標(biāo)識(shí)符不變聋袋《游埃可以根據(jù)它來判斷跟蹤的是否是同一次觸摸過程。*/
        identifier: number
        /** 觸點(diǎn)相對(duì)于屏幕左邊沿的 X 坐標(biāo)幽勒。*/
        screenX: number
        /** 觸點(diǎn)相對(duì)于屏幕上邊沿的 Y 坐標(biāo)嗜侮。*/
        screenY: number
    }

    /**
     * 性能管理器
     */
    type Performance = {
        /**
         * 可以獲取當(dāng)前時(shí)間以微秒為單位的時(shí)間戳
         */
        now(): number;
    }

    /**
     * 加載分包任務(wù)實(shí)例,用于獲取分包加載狀態(tài)
     */
    type LoadSubpackageTask = {
        /**
         * 監(jiān)聽分包加載進(jìn)度變化事件
         * @param callback 分包加載進(jìn)度變化事件的回調(diào)函數(shù)
         */
        onProgressUpdate(callback: (res: {
            /** 分包下載進(jìn)度百分比*/
            progress: number
            /** 已經(jīng)下載的數(shù)據(jù)長(zhǎng)度,單位 Bytes  */
            totalBytesWritten: number
            /** 預(yù)期需要下載的數(shù)據(jù)總長(zhǎng)度锈颗,單位 Bytes*/
            totalBytesExpectedToWrite: number
        }) => void): void
    }

    /**
     * 通過 Canvas.getContext('2d') 接口可以獲取 CanvasRenderingContext2D 對(duì)象缠借,實(shí)現(xiàn)了 HTML Canvas 2D Context 定義的大部分屬性、方法宜猜。
     * 通過 Canvas.getContext('webgl') 接口可以獲取 WebGLRenderingContext 對(duì)象,實(shí)現(xiàn)了 WebGL 1.0 定義的所有屬性硝逢、方法姨拥、常量。
     * 2d 接口支持情況
     * iOS/Android 不支持的 2d 屬性和接口

     * globalCompositeOperation 不支持以下值: source-in source-out destination-atop lighter copy渠鸽。如果使用叫乌,不會(huì)報(bào)錯(cuò),但是將得到與預(yù)期不符的結(jié)果徽缚。
     * isPointInPath
     * WebGL 接口支持情況
     * iOS/Android 不支持的 WebGL 接口

     * pixelStorei 當(dāng)?shù)谝粋€(gè)參數(shù)是 gl.UNPACK_COLORSPACE_CONVERSION_WEBGL 時(shí)
     * compressedTexImage2D
     * compressedTexSubImage2D
     * 除此之外 Android 還不支持 WebGL 接口

     * getExtension
     * getSupportedExtensions
     */
    interface RenderingContext { }

    interface Canvas {
        /** 畫布的寬度*/
        width: number;
        /** 畫布的高度*/
        height: number;

        /**
         * 獲取畫布對(duì)象的繪圖上下文
         */
        getContext(contextType: '2d' | 'webgl', contextAttributes: { antialias?: boolean, preserveDrawingBuffer?: boolean, antialiasSamples?: 2 }): RenderingContext;
        /**
         * 將當(dāng)前 Canvas 保存為一個(gè)臨時(shí)文件憨奸,并生成相應(yīng)的臨時(shí)文件路徑。
         */
        toTempFilePath(object: { x?: number, y?: number, width?: number, height?: number, destWidth?: number, destHeight?: number, fileType?: 'jpg' | 'png', quality?: number, success?: (res?: any) => void, fail?: (err?: any) => void, complete?: (res?: any) => void }): string;
        /**
         * 把畫布上的繪制內(nèi)容以一個(gè) data URI 的格式返回
         */
        toDataURL(): string;
        /**
         * Canvas.toTempFilePath 的同步版本
         */
        toTempFilePathSync(object: { x?: number, y?: number, width?: number, height?: number, destWidth?: number, destHeight?: number, fileType?: 'jpg' | 'png', quality?: number }): void;
    }

    /**
     * 獲取系統(tǒng)信息
     */
    function getSystemInfo(object: { success: (res?: systemInfo) => void, fail: (err?: any) => void, complete: (res?: any) => void }): void;

    /**
     * wx.getSystemInfo 的同步版本
     */
    function getSystemInfoSync(): systemInfo;

    /**
     * 返回值 UpdateManager
     */
    function getUpdateManager(): UpdateManager;

    /**
     * 退出當(dāng)前小游戲
     */
    function exitMiniProgram(object: { success?: () => void, fail?: () => void, complete?: () => void }): void;

    /**
    * 返回小程序啟動(dòng)參數(shù)
    */
    function getLaunchOptionsSync(): launchOption;
    /**
     * 監(jiān)聽小游戲隱藏到后臺(tái)事件凿试。鎖屏排宰、按 HOME 鍵退到桌面、顯示在聊天頂部等操作會(huì)觸發(fā)此事件那婉。
     */
    function onHide(callback: () => void): void;
    /**
     * 取消監(jiān)聽小游戲隱藏到后臺(tái)事件板甘。鎖屏、按 HOME 鍵退到桌面详炬、顯示在聊天頂部等操作會(huì)觸發(fā)此事件盐类。
     */
    function offHide(callback: () => void): void;
    /**
     * 監(jiān)聽小游戲回到前臺(tái)的事件
     */
    function onShow(callback: (res: {
        /** 場(chǎng)景值*/
        scene: string,
        /** 查詢參數(shù)*/
        query: any,
        /** shareTicket*/
        shareTicket: string,
        /** 當(dāng)場(chǎng)景為由從另一個(gè)小程序或公眾號(hào)或App打開時(shí),返回此字段*/
        referrerInfo: ReferrerInfo
    }) => void): void;
    /**
     * 取消監(jiān)聽小游戲回到前臺(tái)的事件
     */
    function offShow(callback: () => void): void;

    /**
    * 監(jiān)聽音頻中斷結(jié)束呛谜,在收到 onAudioInterruptionBegin 事件之后在跳,小程序內(nèi)所有音頻會(huì)暫停,收到此事件之后才可再次播放成功
    */
    function onAudioInterruptionEnd(callback: () => void): void;
    /**
     * 取消監(jiān)聽音頻中斷結(jié)束隐岛,在收到 onAudioInterruptionBegin 事件之后猫妙,小程序內(nèi)所有音頻會(huì)暫停,收到此事件之后才可再次播放成功
     */
    function offAudioInterruptionEnd(callback: () => void): void;
    /**
     * 監(jiān)聽音頻因?yàn)槭艿较到y(tǒng)占用而被中斷開始礼仗,以下場(chǎng)景會(huì)觸發(fā)此事件:鬧鐘吐咳、電話、FaceTime 通話元践、微信語音聊天韭脊、微信視頻聊天。此事件觸發(fā)后单旁,小程序內(nèi)所有音頻會(huì)暫停沪羔。
     */
    function onAudioInterruptionBegin(callback: () => void): void;
    /**
     * 取消監(jiān)聽音頻因?yàn)槭艿较到y(tǒng)占用而被中斷開始,以下場(chǎng)景會(huì)觸發(fā)此事件:鬧鐘、電話蔫饰、FaceTime 通話琅豆、微信語音聊天、微信視頻聊天篓吁。此事件觸發(fā)后茫因,小程序內(nèi)所有音頻會(huì)暫停。
     */
    function offAudioInterruptionBegin(callback: () => void): void;
    /**
     * 監(jiān)聽全局錯(cuò)誤事件
     */
    function onError(callback: (res: {
        /** 錯(cuò)誤*/
        message: string,
        /** 錯(cuò)誤調(diào)用堆棧*/
        stack: string
    }) => void): void;
    /**
     * 取消監(jiān)聽全局錯(cuò)誤事件
     */
    function offError(callback: () => void): void;

    /**
     * 監(jiān)聽開始觸摸事件
     */
    function onTouchStart(callback: (res: {
        /** 當(dāng)前所有觸摸點(diǎn)的列表*/
        touches: Array<Touch>,
        /** 觸發(fā)此次事件的觸摸點(diǎn)列表*/
        changedTouches: Array<Touch>,
        /** 事件觸發(fā)時(shí)的時(shí)間戳*/
        timeStamp: number
    }) => void): void;
    /**
     * 取消監(jiān)聽開始觸摸事件
     */
    function offTouchStart(callback: () => void): void;
    /**
     * 監(jiān)聽觸點(diǎn)移動(dòng)事件
     */
    function onTouchMove(callback: (res: {
        /** 當(dāng)前所有觸摸點(diǎn)的列表*/
        touches: Array<Touch>,
        /** 觸發(fā)此次事件的觸摸點(diǎn)列表*/
        changedTouches: Array<Touch>,
        /** 事件觸發(fā)時(shí)的時(shí)間戳*/
        timeStamp: number
    }) => void): void;
    /**
     * 取消監(jiān)聽觸點(diǎn)移動(dòng)事件
     */
    function offTouchMove(callback: () => void): void;
    /**
     * 監(jiān)聽觸摸結(jié)束事件
     */
    function onTouchEnd(callback: (res: {
        /** 當(dāng)前所有觸摸點(diǎn)的列表*/
        touches: Array<Touch>,
        /** 觸發(fā)此次事件的觸摸點(diǎn)列表*/
        changedTouches: Array<Touch>,
        /** 事件觸發(fā)時(shí)的時(shí)間戳*/
        timeStamp: number
    }) => void): void;
    /**
     * 取消監(jiān)聽觸摸結(jié)束事件
     */
    function offTouchEnd(callback: () => void): void;
    /**
     * 監(jiān)聽觸點(diǎn)失效事件
     */
    function onTouchCancel(callback: (res: {
        /** 當(dāng)前所有觸摸點(diǎn)的列表*/
        touches: Array<Touch>,
        /** 觸發(fā)此次事件的觸摸點(diǎn)列表*/
        changedTouches: Array<Touch>,
        /** 事件觸發(fā)時(shí)的時(shí)間戳*/
        timeStamp: number
    }) => void): void;
    /**
     * 取消監(jiān)聽觸點(diǎn)失效事件
     */
    function offTouchCancel(callback: () => void): void;

    /**
    * 獲取性能管理器
    */
    function getPerformance(): Performance;
    /**
     * 加快觸發(fā) JavaScrpitCore Garbage Collection(垃圾回收)杖剪,GC 時(shí)機(jī)是由 JavaScrpitCore 來控制的冻押,并不能保證調(diào)用后馬上觸發(fā) GC。
     */
    function triggerGC(): void;

    /**
     *  基礎(chǔ)庫 2.1.0 開始支持盛嘿,低版本需做兼容處理洛巢。
     *  觸發(fā)分包加載,詳見 分包加載
     */
    function loadSubpackage(res: {
        /** 分包的名字次兆,可以填 name 或者 root*/
        name: () => void,
        /** 分包加載成功回調(diào)事件*/
        success: () => void,
        /** 分包加載失敗回調(diào)事件*/
        fail: () => void,
        /** 分包加載結(jié)束回調(diào)事件(加載成功稿茉、失敗都會(huì)執(zhí)行)*/
        complete: () => void
    }): LoadSubpackageTask;

    /**
     * 基礎(chǔ)庫 1.4.0 開始支持,低版本需做兼容處理芥炭。
     * 設(shè)置是否打開調(diào)試開關(guān)漓库。此開關(guān)對(duì)正式版也能生效。
     */
    function setEnableDebug(res: {
        /** 是否打開調(diào)試*/
        enableDebug: boolean,
        /** 接口調(diào)用成功的回調(diào)函數(shù)*/
        success?: () => void,
        /** 接口調(diào)用失敗的回調(diào)函數(shù)*/
        fail?: () => void,
        /** 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功园蝠、失敗都會(huì)執(zhí)行)*/
        complete?: () => void
    }): void;

    /**
     * 創(chuàng)建一個(gè)畫布對(duì)象米苹。首次調(diào)用創(chuàng)建的是顯示在屏幕上的畫布,之后調(diào)用創(chuàng)建的都是離屏畫布砰琢。
     */
    function createCanvas(): Canvas;

    /**
     * 可以修改渲染幀率蘸嘶。默認(rèn)渲染幀率為 60 幀每秒。修改后陪汽,requestAnimationFrame 的回調(diào)頻率會(huì)發(fā)生改變训唱。
     */
    function setPreferredFramesPerSecond(fps: number): void;

    /**
     * 獲取一行文本的行高
     * @returns number 文本的行高
     */
    function getTextLineHeight(object: { fontStyle?: 'normal' | 'italic', fontWeight?: 'normal' | 'bold', fontSize?: 16, fontFamily: string, text: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): number;
    /**
     * 加載自定義字體文件
     * @returns string 如果加載字體成功,則返回字體 family 值挚冤,否則返回 null况增。
     */
    function loadFont(path: string): string;


    interface Image {
        /**
         * 圖片的 URL
         */
        src: string;
        /**
        * 圖片的真實(shí)寬度
        */
        width: number;
        /**
        * 圖片的真實(shí)高度
        */
        height: number;
        /**
         * 圖片的加載完成
         */
        onload: (res?: any) => void;
        /**
         * 圖片加載發(fā)生錯(cuò)誤后觸發(fā)的回調(diào)函數(shù)
         */
        onerror: (res?: any) => void;
    }

    /**
     * 創(chuàng)建一個(gè)圖片對(duì)象
     */
    function createImage(): Image;

    /**
     * banner 廣告組件。banner 廣告組件是一個(gè)原生組件训挡,層級(jí)比上屏 Canvas 高澳骤,會(huì)覆蓋在上屏 Canvas 上。banner 廣告組件默認(rèn)是隱藏的澜薄,需要調(diào)用 BannerAd.show() 將其顯示为肮。banner 廣告會(huì)根據(jù)開發(fā)者設(shè)置的寬度進(jìn)行等比縮放,縮放后的尺寸將通過 BannerAd.onResize() 事件中提供肤京。
     */
    interface BannerAd {
        /**
         * banner 廣告組件的樣式颊艳。style 上的屬性的值僅為開發(fā)者設(shè)置的值,banner 廣告會(huì)根據(jù)開發(fā)者設(shè)置的寬度進(jìn)行等比縮放,縮放后的真實(shí)尺寸需要通過 BannerAd.onResize() 事件獲得棋枕。
         */
        style: {
            /** banner 廣告組件的左上角橫坐標(biāo)*/
            left: number,
            /** banner 廣告組件的左上角縱坐標(biāo)*/
            top: number,
            /** banner 廣告組件的寬度白修。最小 300,最大至 屏幕寬度(屏幕寬度可以通過 wx.getSystemInfoSync() 獲戎匕摺)兵睛。*/
            width: number,
            /** banner 廣告組件的高度*/
            height: number,
            /** banner 廣告組件經(jīng)過縮放后真實(shí)的寬度*/
            realWidth: number,
            /** banner 廣告組件經(jīng)過縮放后真實(shí)的高度*/
            realHeight: number
        };

        /** 顯示 banner 廣告。*/
        show(): Promise<any>;
        /** 隱藏 banner 廣告*/
        hide(): void;
        /** 銷毀 banner 廣告*/
        destroy(): void;
        /** 監(jiān)聽 banner 廣告尺寸變化事件*/
        onResize(callback: (res: { width: number, height: number }) => void): void;
        /** 取消監(jiān)聽 banner 廣告尺寸變化事件*/
        offResize(callback: () => void): void;
        /** 監(jiān)聽 banner 廣告加載事件*/
        onLoad(callback: () => void): void;
        /** 取消監(jiān)聽 banner 廣告加載事件*/
        offLoad(callback: () => void): void;
        /** 監(jiān)聽 banner 廣告錯(cuò)誤事件*/
        onError(callback: (res: { errMsg: string, errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 }) => void): void;
        /** 取消監(jiān)聽 banner 廣告錯(cuò)誤事件*/
        offError(callback: () => void): void;
    }

    /**
     * 激勵(lì)視頻廣告組件窥浪。激勵(lì)視頻廣告組件是一個(gè)原生組件卤恳,并且是一個(gè)全局單例。層級(jí)比上屏 Canvas 高寒矿,會(huì)覆蓋在上屏 Canvas 上。激勵(lì)視頻 廣告組件默認(rèn)是隱藏的若债,需要調(diào)用 RewardedVideoAd.show() 將其顯示符相。
     */
    interface RewardedVideoAd {
        /** 隱藏激勵(lì)視頻廣告*/
        load(): Promise<any>;
        /** 顯示激勵(lì)視頻廣告。激勵(lì)視頻廣告將從屏幕下方推入蠢琳。*/
        show(): Promise<any>;
        /** 銷毀 banner 廣告*/
        destroy(): void;
        /** 監(jiān)聽 banner 廣告尺寸變化事件*/
        onResize(callback: (res: { width: number, height: number }) => void): void;
        /** 取消監(jiān)聽 banner 廣告尺寸變化事件*/
        offResize(callback: () => void): void;
        /** 監(jiān)聽激勵(lì)視頻廣告加載事件*/
        onLoad(callback: () => void): void;
        /** 取消監(jiān)聽激勵(lì)視頻廣告加載事件*/
        offLoad(callback: () => void): void;
        /** 監(jiān)聽激勵(lì)視頻錯(cuò)誤事件*/
        onError(callback: (res: { errMsg: string, errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 }) => void): void;
        /** 取消監(jiān)聽激勵(lì)視頻錯(cuò)誤事件*/
        offError(callback: () => void): void;
        /** 監(jiān)聽用戶點(diǎn)擊 關(guān)閉廣告 按鈕的事件*/
        onClose(callback: (res: { isEnded: boolean }) => void);
        /** 取消監(jiān)聽用戶點(diǎn)擊 關(guān)閉廣告 按鈕的事件*/
        offClose(callback: () => void);
    }

    /**
     * 創(chuàng)建激勵(lì)視頻廣告組件啊终。請(qǐng)通過 wx.getSystemInfoSync() 返回對(duì)象的 SDKVersion 判斷基礎(chǔ)庫版本號(hào) >= 2.0.4 后再使用該 API。同時(shí)傲须,開發(fā)者工具上暫不支持調(diào)試該 API蓝牲,請(qǐng)直接在真機(jī)上進(jìn)行調(diào)試。
     */
    function createRewardedVideoAd(res: { adUnitId: string }): RewardedVideoAd;

    /**
     * 創(chuàng)建 banner 廣告組件泰讽。請(qǐng)通過 wx.getSystemInfoSync() 返回對(duì)象的 SDKVersion 判斷基礎(chǔ)庫版本號(hào) >= 2.0.4 后再使用該 API例衍。同時(shí),開發(fā)者工具上暫不支持調(diào)試該 API已卸,請(qǐng)直接在真機(jī)上進(jìn)行調(diào)試佛玄。
     */
    function createBannerAd(res: {
        adUnitId: string, style: {
            left: number,
            top: number,
            width: number,
            height: number
        }
    }): BannerAd;

    /**
     * 顯示操作菜單
     */
    function showActionSheet(object: { itemList: string[], itemColor?: string, success?: (res?: { tapIndex: number }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 隱藏 loading 提示框*/
    function hideLoading(object: { success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;
    /** 顯示 loading 提示框。需主動(dòng)調(diào)用 wx.hideLoading 才能關(guān)閉提示框*/
    function showLoading(object: { title: string, mask?: boolean, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 隱藏消息提示框*/
    function hideToast(object: { success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 顯示消息提示框*/
    function showToast(object: { title: string, icon?: 'success' | 'loading' | 'none', image?: string, duration?: 1500, mask?: boolean, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 顯示模態(tài)對(duì)話框
     */
    function showModal(object: {
        title: string,
        content: string,
        showCancel?: boolean,
        cancelText?: string,
        cancelColor?: string,
        confirmText?: string,
        confirmColor?: string,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 基礎(chǔ)庫 2.1.0 開始支持累澡,低版本需做兼容處理梦抢。更新鍵盤輸入框內(nèi)容。只有當(dāng)鍵盤處于拉起狀態(tài)時(shí)才會(huì)產(chǎn)生效果
     */
    function updateKeyboard(res: {
        value: string,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 隱藏鍵盤
     */
    function hideKeyboard(object: { success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
    * 顯示鍵盤
    */
    function showKeyboard(object: { defaultValue: string, maxLength: number, multiple: boolean, confirmHold: boolean, confirmType: 'done' | 'next' | 'search' | 'go' | 'send', success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;
    /**
     * 監(jiān)聽鍵盤輸入事件
     */
    function onKeyboardInput(callback: (res: { value: string }) => void): void;
    /**
     * 取消監(jiān)聽鍵盤輸入事件
     */
    function offKeyboardInput(callback: () => void): void;
    /**
     * 監(jiān)聽用戶點(diǎn)擊鍵盤 Confirm 按鈕時(shí)的事件
     */
    function onKeyboardConfirm(callback: (res: { value: string }) => void): void;
    /**
     * 取消監(jiān)聽用戶點(diǎn)擊鍵盤 Confirm 按鈕時(shí)的事件
     */
    function offKeyboardConfirm(callback: () => void): void;
    /**
     * 監(jiān)聽監(jiān)聽鍵盤收起的事件
     */
    function onKeyboardComplete(callback: (res: { value: string }) => void): void;
    /**
     * 取消監(jiān)聽監(jiān)聽鍵盤收起的事件
     */
    function offKeyboardComplete(callback: () => void): void;

    /** 基礎(chǔ)庫 2.1.0 開始支持愧哟,低版本需做兼容處理奥吩。獲取菜單按鈕(右上角膠囊按鈕)的布局位置信息。坐標(biāo)信息以屏幕左上角為原點(diǎn)蕊梧。*/
    function getMenuButtonBoundingClientRect(): {
        width: number,
        height: number,
        top: number,
        right: number,
        bottom: number,
        left: number
    };

    /** 動(dòng)態(tài)設(shè)置通過右上角按鈕拉起的菜單的樣式霞赫。*/
    function setMenuStyle(res: { style: 'light' | 'dark', success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 當(dāng)在配置中設(shè)置 showStatusBarStyle 時(shí),屏幕頂部會(huì)顯示狀態(tài)欄肥矢。此接口可以修改狀態(tài)欄的樣式绩脆。*/
    function setStatusBarStyle(res: { style: 'white' | 'black', success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 監(jiān)聽窗口尺寸變化事件
     */
    function onWindowResize(callback: (res: { windowWidth: number, windowHeight: number }) => void): void;
    /**
     * 取消監(jiān)聽窗口尺寸變化事件
     */
    function offWindowResize(callback: () => void): void;

    interface RequestTask {
        abort(): void;
        /** 監(jiān)聽 HTTP Response Header 事件。會(huì)比請(qǐng)求完成事件更早*/
        onHeadersReceived(callback: (res: { header: Object }) => void): void;
        /** 取消監(jiān)聽 HTTP Response Header 事件*/
        offHeadersReceived(callback: () => void): void;
    }

    /**
     * 發(fā)起網(wǎng)絡(luò)請(qǐng)求。
     */
    function request(object: {
        url: string,
        data?: string | {} | ArrayBuffer,
        header?: {},
        method?: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT',
        dataType?: 'json' | string,
        responseType: 'text' | 'arraybuffer',
        success?: (res?: {
            data: string | {} | ArrayBuffer,
            statusCode: number,
            header: {}
        }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): RequestTask;


    interface DownloadTask {
        abort(): void;

        /** 監(jiān)聽下載進(jìn)度變化事件*/
        onProgressUpdate(callback: (res: {
            progress: number,
            totalBytesWritten: number,
            totalBytesExpectedToWrite: number
        }) => void): void;

        /** 取消監(jiān)聽下載進(jìn)度變化事件*/
        offProgressUpdate(callback: () => void): void;
        /** 監(jiān)聽 HTTP Response Header 事件靴迫。會(huì)比請(qǐng)求完成事件更早*/
        onHeadersReceived(callback: (res: { header: Object }) => void): void;
        /** 取消監(jiān)聽 HTTP Response Header 事件*/
        offHeadersReceived(callback: () => void): void;
    }

    /**
     * 下載文件資源到本地惕味,客戶端直接發(fā)起一個(gè) HTTP GET 請(qǐng)求,返回文件的本地文件路徑玉锌。
     */
    function downloadFile(object: {
        url: string,
        header?: Object,
        filePath?: string,
        success?: (res?: {
            tempFilePath: string,
            statusCode: number
        }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): DownloadTask;

    interface UploadTask {
        /** 中斷上傳任務(wù)*/
        abort(): void;
        /** 監(jiān)聽上傳進(jìn)度變化事件*/
        onProgressUpdate(callback: (res: {
            progress: number,
            totalBytesSent: number,
            totalBytesExpectedToSend: number
        }) => void): void;
        /** 取消監(jiān)聽上傳進(jìn)度變化事件*/
        offProgressUpdate(callback: () => void): void;
        /** 監(jiān)聽 HTTP Response Header 事件名挥。會(huì)比請(qǐng)求完成事件更早*/
        onHeadersReceived(callback: (res: { header: Object }) => void): void;
        /** 取消監(jiān)聽 HTTP Response Header 事件*/
        offHeadersReceived(callback: () => void): void;
    }

    /**
     * 將本地資源上傳到開發(fā)者服務(wù)器,客戶端發(fā)起一個(gè) HTTPS POST 請(qǐng)求主守,其中 content-type 為 multipart/form-data 禀倔。
     */
    function uploadFile(object: {
        url: string,
        filePath: string,
        name: string,
        header?: Object,
        formData?: Object,
        success?: (res?: {
            data: string,
            statusCode: number
        }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): UploadTask;

    interface SocketTask {
        /**
         * 關(guān)閉 WebSocket 連接
         */
        close(object: { code?: 1000, reason?: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;
        /**
         * 監(jiān)聽WebSocket 連接打開事件
         */
        onOpen(callback: (res: { header: Object }) => void): void;
        /**
         * 監(jiān)聽WebSocket 連接關(guān)閉事件
         */
        onClose(callback: () => void): void;
        /**
         * 監(jiān)聽WebSocket 錯(cuò)誤事件
         */
        onError(callback: (res: { errMsg: string }) => void): void;
        /**
         * 監(jiān)聽WebSocket 接受到服務(wù)器的消息事件
         */
        onMessage(callback: (res: { data: string | ArrayBuffer }) => void): void;
        /**
         * 通過 WebSocket 連接發(fā)送數(shù)據(jù)
         */
        send(object: { data: string | ArrayBuffer, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;
    }

    /**
     * 監(jiān)聽WebSocket 錯(cuò)誤事件
     */
    function onSocketError(callback: (err?: any) => void): void;

    /**
     * 創(chuàng)建一個(gè) WebSocket 連接。
     */
    function connectSocket(object: { url: string, header?: {}, protocols: Array<string>, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): SocketTask;
    /**
     * 關(guān)閉 WeSocket 連接
     */
    function closeSocket(object: { code?: 1000, reason?: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;
    /**
     * 監(jiān)聽WebSocket 連接打開事件
     */
    function onSocketOpen(callback: (res: { header: {} }) => void): void;
    /**
     * 監(jiān)聽WebSocket 連接關(guān)閉事件
     */
    function onSocketClose(callback: () => void): void;
    /**
     * 監(jiān)聽WebSocket 接受到服務(wù)器的消息事件
     */
    function onSocketMessage(callback: (res: { data: string | ArrayBuffer }) => void): void;
    /**
     * 通過 WebSocket 連接發(fā)送數(shù)據(jù)参淫,需要先 wx.connectSocket救湖,并在 wx.onSocketOpen 回調(diào)之后才能發(fā)送。
     */
    function sendSocketMessage(object: { data: string | ArrayBuffer, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 創(chuàng)建一個(gè) UDP Socket 實(shí)例涎才。使用前請(qǐng)注意閱讀相關(guān)說明*/
    function createUDPSocket(): UDPSocket;

    /** 一個(gè) UDP Socket 實(shí)例鞋既,默認(rèn)使用 IPv4 協(xié)議*/
    interface UDPSocket {
        /** 綁定一個(gè)系統(tǒng)隨機(jī)分配的可用端口,或綁定一個(gè)指定的端口號(hào)*/
        bind(port: number): number;
        /** 關(guān)閉 UDP Socket 實(shí)例耍铜,相當(dāng)于銷毀邑闺。 在關(guān)閉之后,UDP Socket 實(shí)例不能再發(fā)送消息棕兼,每次調(diào)用 UDPSocket.send 將會(huì)觸發(fā)錯(cuò)誤事件陡舅,并且 message 事件回調(diào)函數(shù)也不會(huì)再也執(zhí)行。在 UDPSocket 實(shí)例被創(chuàng)建后將被 Native 強(qiáng)引用伴挚,保證其不被 GC靶衍。在 UDPSocket.close 后將解除對(duì)其的強(qiáng)引用,讓 UDPSocket 實(shí)例遵從 GC茎芋。*/
        close(): void;
        /** 取消監(jiān)聽關(guān)閉事件*/
        offClose(callback: () => void): void;
        /** 取消監(jiān)聽錯(cuò)誤事件*/
        offError(callback: () => void): void;
        /** 取消監(jiān)聽開始監(jiān)聽數(shù)據(jù)包消息的事件*/
        offListening(callback: () => void): void;
        /** 取消監(jiān)聽收到消息的事件*/
        offMessage(callback: () => void): void;
        /** 監(jiān)聽關(guān)閉事件*/
        onClose(callback: () => void): void;
        /** 監(jiān)聽錯(cuò)誤事件*/
        onError(callback: () => void): void;
        /** 監(jiān)聽開始監(jiān)聽數(shù)據(jù)包消息的事件*/
        onListening(callback: () => void): void;
        /** 監(jiān)聽收到消息的事件*/
        onMessage(callback: () => void): void;
        /** 向指定的 IP 和 port 發(fā)送消息*/
        send(obj: { address: string, port: number, message: string | ArrayBuffer, offset?: number, length?: number }): void;
    }

    /** 
     * 更新轉(zhuǎn)發(fā)屬性
     * 
     */
    function updateShareMenu(object: { withShareTicket?: boolean, isUpdatableMessage?: boolean, activityId?: string, templateInfo?: { parameterList: Array<{ name: string, value: string }> }, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 顯示當(dāng)前頁面的轉(zhuǎn)發(fā)按鈕
     */
    function showShareMenu(object: { withShareTicket?: boolean, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 隱藏轉(zhuǎn)發(fā)按鈕
     * 
     */
    function hideShareMenu(object: { success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 獲取轉(zhuǎn)發(fā)詳細(xì)信息
     *  
     */
    function getShareInfo(object: {
        shareTicket: string,
        timeout: number,
        success?: (res: {
            errMsg: string,
            encryptedData: string,
            iv: string
        }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 主動(dòng)拉起轉(zhuǎn)發(fā)摊灭,進(jìn)入選擇通訊錄界面。
     */
    function shareAppMessage(object: { title?: string, imageUrl?: string, query?: string, imageUrlId?: string }): void;

    /**
     * 取消監(jiān)聽用戶點(diǎn)擊右上角菜單的“轉(zhuǎn)發(fā)”按鈕時(shí)觸發(fā)的事件
     */
    function offShareAppMessage(callback: () => void): void;

    /**
     * 監(jiān)聽用戶點(diǎn)擊右上角菜單的“轉(zhuǎn)發(fā)”按鈕時(shí)觸發(fā)的事件
     */
    function onShareAppMessage(callback: (res: {
        title: string,
        imageUrl: string,
        query: string
    }) => void): void;


    /**
    * 發(fā)起米大師支付
    */
    function requestMidasPayment(object: {
        mode: string,
        env?: 0 | 1,
        offerId: string,
        currencyType: string,
        platform?: string,
        buyQuantity?: number,
        zoneId?: string,
        success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /**
     * wx.getStorageInfo 的同步版本
     */
    function getStorageInfoSync(): { keys: Array<string>, currentSize: number, limitSize: number };

    /**
     * 異步獲取當(dāng)前storage的相關(guān)信息
     */
    function getStorageInfo(object: { success?: (res: { keys: Array<string>, currentSize: number, limitSize: number }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * wx.clearStorage 的同步版本
     */
    function clearStorageSync(): void;

    /**
     * 清理本地?cái)?shù)據(jù)緩存
     */
    function clearStorage(object: { success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * wx.removeStorage 的同步版本
     */
    function removeStorageSync(key: string): void;

    /**
     * 從本地緩存中移除指定 key
     */
    function removeStorage(object: { key: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * wx.setStorage 的同步版本
     */
    function setStorageSync(key: string, data: any): void;

    /**
     * 將數(shù)據(jù)存儲(chǔ)在本地緩存中指定的 key 中败徊,會(huì)覆蓋掉原來該 key 對(duì)應(yīng)的內(nèi)容帚呼。
     */
    function setStorage(object: { key: string, data: any, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * wx.getStorage 的同步版本
     */
    function getStorageSync(key: string): any;

    /**
     * 從本地緩存中異步獲取指定 key 的內(nèi)容
     */
    function getStorage(object: { key: string, success?: (res: { data: any }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 設(shè)置 InnerAudioContext 的播放選項(xiàng)。設(shè)置之后對(duì)當(dāng)前小程序全局生效皱蹦。
     */
    function setInnerAudioOption(mixWithOther: true, obeyMuteSwitch: true, success?: (res: { data: any }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void): void;

    /**
     * 獲取當(dāng)前支持的音頻輸入源
     */
    function getAvailableAudioSources(success?: (res: { audioSources: Array<'auto' | 'buildInMic' | 'headsetMic' | 'mic' | 'camcorder' | 'voice_communication' | 'voice_recognition'> }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void): void;

    /**
     * InnerAudioContext 實(shí)例煤杀,可通過 wx.createInnerAudioContext 接口獲取實(shí)例疲酌。
     */
    interface InnerAudioContext {
        /** 音頻資源的地址痹升,用于直接播放。2.2.3 開始支持云文件ID*/
        src: string;
        /** 開始播放的位置(單位:s)笤喳,默認(rèn)為 0*/
        startTime: number;
        /** 是否自動(dòng)開始播放辜妓,默認(rèn)為 false*/
        autoplay: boolean;
        /** 是否循環(huán)播放枯途,默認(rèn)為 false*/
        loop: boolean;
        /** 是否遵循系統(tǒng)靜音開關(guān)忌怎,默認(rèn)為 true。當(dāng)此參數(shù)為 false 時(shí)酪夷,即使用戶打開了靜音開關(guān)榴啸,也能繼續(xù)發(fā)出聲音*/
        obeyMuteSwitch: boolean;
        /** 基礎(chǔ)庫 1.9.90 開始支持,低版本需做兼容處理晚岭。音量鸥印。范圍 0~1。默認(rèn)為 1*/
        volume: number;
        /** 當(dāng)前音頻的長(zhǎng)度(單位 s)坦报。只有在當(dāng)前有合法的 src 時(shí)返回(只讀)*/
        duration: number;
        /** 當(dāng)前音頻的播放位置(單位 s)库说。只有在當(dāng)前有合法的 src 時(shí)返回,時(shí)間保留小數(shù)點(diǎn)后 6 位(只讀)*/
        currentTime: number;
        /** 當(dāng)前是是否暫推瘢或停止?fàn)顟B(tài)(只讀)*/
        paused: boolean;
        /** 音頻緩沖的時(shí)間點(diǎn)潜的,僅保證當(dāng)前播放時(shí)間點(diǎn)到此時(shí)間點(diǎn)內(nèi)容已緩沖(只讀)*/
        buffered: number;
        /**
         * 銷毀當(dāng)前實(shí)例
         */
        destroy(): void;
        /**
         * 取消監(jiān)聽音頻進(jìn)入可以播放狀態(tài)的事件
         */
        offCanplay(callback: () => void): void;
        /**
         * 監(jiān)聽音頻暫停事件
         */
        onPause(callback: () => void): void;
        /**
         * 監(jiān)聽音頻停止事件
         */
        onStop(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻停止事件
         */
        offStop(callback: () => void): void;
        /**
         * 監(jiān)聽音頻自然播放至結(jié)束的事件
         */
        onEnded(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻自然播放至結(jié)束的事件
         */
        offEnded(callback: () => void): void;
        /**
         * 監(jiān)聽音頻播放進(jìn)度更新事件
         */
        onTimeUpdate(callback: () => void): void;
        /**
         * 監(jiān)聽音頻播放事件
         */
        onPlay(callback: () => void): void;
        /**
         * 監(jiān)聽音頻播放錯(cuò)誤事件
         */
        onError(callback: (res: { errCode: 10001 | 10002 | 10003 | 10004 | -1 }) => void): void;
        /**
         * 取消監(jiān)聽音頻暫停事件
         */
        offPause(callback: () => void): void;
        /**
         * 監(jiān)聽音頻加載中事件,當(dāng)音頻因?yàn)閿?shù)據(jù)不足字管,需要停下來加載時(shí)會(huì)觸發(fā)
         */
        onWaiting(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻加載中事件啰挪,當(dāng)音頻因?yàn)閿?shù)據(jù)不足,需要停下來加載時(shí)會(huì)觸發(fā)
         */
        offWaiting(callback: () => void): void;
        /**
         * 監(jiān)聽音頻進(jìn)行跳轉(zhuǎn)操作的事件
         */
        onSeeking(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻進(jìn)行跳轉(zhuǎn)操作的事件
         */
        offSeeking(callback: () => void): void;
        /**
         * 監(jiān)聽音頻完成跳轉(zhuǎn)操作的事件
         */
        onSeeked(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻完成跳轉(zhuǎn)操作的事件
         */
        offSeeked(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻播放事件
         */
        offPlay(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻播放進(jìn)度更新事件
         */
        offTimeUpdate(callback: () => void): void;
        /**
         * 監(jiān)聽音頻進(jìn)入可以播放狀態(tài)的事件
         */
        onCanplay(callback: () => void): void;
        /**
         * 取消監(jiān)聽音頻播放錯(cuò)誤事件
         */
        offError(callback: () => void): void;
        /**
         * 停止纤掸。停止后的音頻再播放會(huì)從頭開始播放。
         */
        pause(): void;
        /**
         * 播放
         */
        play(): void;
        /**
         * 跳轉(zhuǎn)到指定位置浑塞,單位 s
         */
        seek(position: number): void;
    }
    /**
     * 創(chuàng)建內(nèi)部 audio 上下文 InnerAudioContext 對(duì)象借跪。
     */
    function createInnerAudioContext(): InnerAudioContext;

    /**
     * 從本地相冊(cè)選擇圖片或使用相機(jī)拍照。
     */
    function chooseImage(object: {
        count: 9,
        sizeType?: ['original', 'compressed'],
        sourceType?: ['album', 'camera'],
        success?: (res: {
            tempFilePaths: Array<string>,
            tempFiles: Array<{ path: string, size: number }>
        }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 預(yù)覽圖片
     */
    function previewImage(object: { urls: string[], current?: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;
    /**
     * 保存圖片到系統(tǒng)相冊(cè)酌壕。
     */
    function saveImageToPhotosAlbum(object: { filePath: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**全局唯一的錄音管理器 */
    interface RecorderManager {
        /**
         * 監(jiān)聽錄音暫停事件
         */
        onPause(callback: () => void): void;
        /**
         * 監(jiān)聽錄音結(jié)束事件
         */
        onStop(callback: (res: { tempFilePath: string }) => void): void;
        /**
         * 監(jiān)聽已錄制完指定幀大小的文件事件掏愁。如果設(shè)置了 frameSize,則會(huì)回調(diào)此事件卵牍。
         */
        onFrameRecorded(callback: (res: { frameBuffer: ArrayBuffer, isLastFrame: boolean }) => void): void;
        /**
         * 監(jiān)聽錄音錯(cuò)誤事件
         */
        onError(callback: (res: { errMsg: string }) => void): void;
        /**
         * 監(jiān)聽錄音開始事件
         */
        onStart(callback: () => void): void;
        /**
         * 監(jiān)聽錄音因?yàn)槭艿较到y(tǒng)占用而被中斷開始事件果港。以下場(chǎng)景會(huì)觸發(fā)此事件:微信語音聊天、微信視頻聊天糊昙。此事件觸發(fā)后辛掠,錄音會(huì)被暫停。pause 事件在此事件后觸發(fā)
         */
        onInterruptionBegin(callback: () => void): void;
        /**
         * 監(jiān)聽錄音中斷結(jié)束事件释牺。在收到 interruptionBegin 事件之后萝衩,小程序內(nèi)所有錄音會(huì)暫停,收到此事件之后才可再次錄音成功没咙。
         */
        onInterruptionEnd(callback: () => void): void;
        /**
         * 監(jiān)聽錄音繼續(xù)事件
         */
        onResume(callback: () => void): void;
        /**
         * 暫停錄音
         */
        pause(): void;
        /**
         * 繼續(xù)錄音
         */
        resume(): void;
        /**
         * 停止錄音
         */
        stop(): void;
        /**
         * 開始錄音
         */
        start(object: { duration?: number, sampleRate?: number, numberOfChannels?: number, encodeBitRate?: number, format?: string, frameSize?: number, audioSource?: string }): void;
    }

    /**
     * 獲取全局唯一的錄音管理器 RecorderManager
     */
    function getRecorderManager(): RecorderManager;

    /** 視頻對(duì)象*/
    interface Video {
        /** 視頻的左上角橫坐標(biāo)*/
        x: number;
        /** 視頻的左上角縱坐標(biāo)*/
        y: number;
        /** 視頻的寬度*/
        width: number;
        /** 視頻的高度*/
        height: number;
        /** 視頻的資源地址*/
        src: number;
        /** 視頻的封面*/
        poster: number;
        /** 視頻的初始播放位置猩谊,單位為 s 秒*/
        initialTime: number;
        /** 視頻的播放速率,有效值有 0.5祭刚、0.8牌捷、1.0墙牌、1.25、1.5*/
        playbackRate: number;
        /** 視頻是否為直播*/
        live: number;
        /** 視頻的縮放模式*/
        objectFit: number;
        /** 視頻是否顯示控件*/
        controls: number;
        /** 視頻是否自動(dòng)播放*/
        autoplay: number;
        /** 視頻是否是否循環(huán)播放*/
        loop: number;
        /** 視頻是否禁音播放*/
        muted: number;
        /** 是否啟用手勢(shì)控制播放進(jìn)度*/
        enableProgressGesture: boolean;
        /** 是否顯示視頻中央的播放按鈕*/
        showCenterPlayBtn: boolean;

        /** 視頻開始緩沖時(shí)觸發(fā)的回調(diào)函數(shù)*/
        onwaiting: () => void;

        /** 視頻開始播放時(shí)觸發(fā)的回調(diào)函數(shù)*/
        onplay: () => void;

        /** 視頻暫停時(shí)觸發(fā)的回調(diào)函數(shù)*/
        onpause: () => void;

        /** 視頻播放到末尾時(shí)觸發(fā)的回調(diào)函數(shù)*/
        onended: () => void;

        /** 每當(dāng)視頻播放進(jìn)度更新時(shí)觸發(fā)的回調(diào)函數(shù)*/
        ontimeupdate: () => void;

        /** 視頻發(fā)生錯(cuò)誤時(shí)觸發(fā)的回調(diào)函數(shù)*/
        onerror: () => void;

        /**
         * 視頻退出全屏
         */
        exitFullScreen(): Promise<Object>;
        /**
         * 取消監(jiān)聽視頻暫停事件
         */
        offPause(callback: () => void): void;
        /**
         * 監(jiān)聽視頻播放到末尾事件
         */
        onEnded(callback: () => void): void;
        /**
         * 取消監(jiān)聽視頻播放到末尾事件
         */
        offEnded(callback: () => void): void;
        /**
         * 監(jiān)聽視頻播放進(jìn)度更新事件
         */
        onTimeUpdate(callback: (res: { position: number, duration: number }) => void): void;
        /**
         * 取消監(jiān)聽視頻播放進(jìn)度更新事件
         */
        offTimeUpdate(callback: () => void): void;
        /**
         * 監(jiān)聽視頻錯(cuò)誤事件
         */
        onError(callback: (res: { errMsg: string }) => void): void;
        /**
         * 取消監(jiān)聽視頻錯(cuò)誤事件
         */
        offError(callback: () => void): void;
        /**
         * 監(jiān)聽視頻播放事件
         */
        onPlay(callback: () => void): void;
        /**
         * 監(jiān)聽視頻暫停事件
         */
        onPause(callback: () => void): void;
        /**
         * 取消監(jiān)聽視頻緩沖事件
         */
        offWaiting(callback: () => void): void;
        /**
         * 監(jiān)聽視頻緩沖事件
         */
        onWaiting(callback: () => void): void;
        /**
         * 取消監(jiān)聽視頻播放事件
         */
        offPlay(callback: () => void): void;
        /**
         * 暫停視頻
         */
        pause(): Promise<any>;
        /**
         * 播放視頻
         */
        play(): Promise<any>;
        /**
         * 視頻全屏
         */
        requestFullScreen(): Promise<any>;
        /**
         * 視頻跳轉(zhuǎn)
         */
        seek(time: number): Promise<any>;
        /**
         * 停止視頻
         */
        stop(): Promise<Object>;
    }

    /**
     * 創(chuàng)建視頻
     */
    function createVideo(object: {
        x?: number, y?: number,
        width?: number, height?: number,
        src: number, poster: number,
        initialTime?: number, playbackRate?: number,
        live?: number, objectFit?: number,
        controls?: number, autoplay?: number,
        loop?: number, muted?: number,
        enableProgressGesture: boolean,
        showCenterPlayBtn: boolean
    }): Video;

    /**
     * 獲取當(dāng)前的地理位置暗甥、速度喜滨。當(dāng)用戶離開小程序后,此接口無法調(diào)用淋袖;當(dāng)用戶點(diǎn)擊“顯示在聊天頂部”時(shí)鸿市,此接口可繼續(xù)調(diào)用。
     */
    function getLocation(object: {
        type?: string, altitude: string,
        success?: (res: {
            latitude: number,
            longitude: number,
            speed: number,
            accuracy: number,
            altitude: number,
            verticalAccuracy: number,
            horizontalAccuracy: number
        }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 文件管理器*/
    interface FileSystemManager {
        /**
         * 判斷文件/目錄是否存在
         */
        access(object: {
            path: string,
            success?: (res?: any) => void,
            fail?: (res?: { errMsg: string }) => void,
            complete?: (res?: any) => void
        }): void;
        /**
         * FileSystemManager.access 的同步版本
         */
        accessSync(path: string): void;

        /** 在文件結(jié)尾追加內(nèi)容*/
        appendFile(filePath: string,
            data: string | ArrayBuffer,
            encoding: string,
            success?: (res?: any) => void,
            fail?: (res: { errMsg: string }) => void,
            complete?: (res?: any) => void): void;

        /** appendFile同步版本*/
        appendFileSync(filePath: string, data: string | ArrayBuffer, encoding: string): void;

        /**
        * 保存臨時(shí)文件到本地即碗。此接口會(huì)移動(dòng)臨時(shí)文件焰情,因此調(diào)用成功后,tempFilePath 將不可用剥懒。
        */
        saveFile(object: { tempFilePath: string, filePath?: string, success?: (res: { savedFilePath: number }) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
        * FileSystemManager.saveFile 的同步版本
        */
        saveFileSync(tempFilePath: string, filePath: string): number;

        /**
         * 獲取該小程序下已保存的本地緩存文件列表
         */
        getSavedFileList(object: { success?: (res: { fileList: Array<{ filePath: string, size: number, createTime: number }> }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

        /**
         * 刪除該小程序下已保存的本地緩存文件
         */
        removeSavedFile(object: { filePath: string, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * 復(fù)制文件
         */
        copyFile(object: { srcPath: string, destPath: string, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * FileSystemManager.copyFile 的同步版本
         */
        copyFileSync(srcPath: string, destPath: string): void;

        /**
         * 獲取該小程序下的 本地臨時(shí)文件 或 本地緩存文件 信息
         */
        getFileInfo(object: { filePath: string, success?: (res: { size: number }) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * 創(chuàng)建目錄
         */
        mkdir(object: { dirPath: string, recursive?: boolean, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * FileSystemManager.mkdir 的同步版本
         */
        mkdirSync(dirPath: string): void;

        /**
         * 讀取本地文件內(nèi)容
         */
        readFile(object: { filePath: string, encoding?: string, success?: (res: { data: string | ArrayBuffer }) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * FileSystemManager.readFile 的同步版本
         */
        readFileSync(filePath: string, encoding: string): string | ArrayBuffer;

        /**
         * 讀取目錄內(nèi)文件列表
         */
        readdir(object: { dirPath: string, success?: (res: { files: Array<string> }) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;
        /**
         * FileSystemManager.readdir 的同步版本
         */
        readdirSync(dirPath: string): string[];

        /**
         * 重命名文件内舟,可以把文件從 oldPath 移動(dòng)到 newPath
         */
        rename(object: { oldPath: string, newPath: string, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
        * FileSystemManager.rename 的同步版本
        */
        renameSync(oldPath: string, newPath: string): void;

        /**
         * 刪除目錄
         */
        rmdir(object: { dirPath: string, recursive: boolean, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * FileSystemManager.rmdir 的同步版本
         */
        rmdirSync(dirPath: string, recursive: boolean): void;

        /**
         * 獲取文件 Stats 對(duì)象
         */
        stat(object: { path: string, recursive?: boolean, success?: (res: { stats: Stats | Object }) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): Stats;

        /**
         * FileSystemManager.stat 的同步版本
         */
        statSync(path: string, recursive: boolean): Stats;

        /**
         * 刪除文件
         */
        unlink(object: { filePath: string, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * 解壓文件
         */
        unzip(object: { zipFilePath: string, targetPath: string, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * FileSystemManager.unlink 的同步版本
         */
        unlinkSync(filePath: string): void;

        /**
         * 寫文件
         */
        writeFile(object: { filePath: string, data: string | ArrayBuffer, encoding: string, success?: (res?: any) => void, fail?: (res: { errMsg: string }) => void, complete?: (res?: any) => void }): void;

        /**
         * FileSystemManager.writeFile 的同步版本
         */
        writeFileSync(filePath: string, data: string | ArrayBuffer, encoding: string): void;
    }

    /** 描述文件狀態(tài)的對(duì)象*/
    interface Stats {
        /**
         * 文件的類型和存取的權(quán)限,對(duì)應(yīng) POSIX stat.st_mode
         */
        mode: string;
        /**
         * 文件大小初橘,單位:B验游,對(duì)應(yīng) POSIX stat.st_size
         */
        size: number;
        /**
         * 文件最近一次被存取或被執(zhí)行的時(shí)間,UNIX 時(shí)間戳保檐,對(duì)應(yīng) POSIX stat.st_atime
         */
        lastAccessedTime: number;
        /**
        * 文件最后一次被修改的時(shí)間耕蝉,UNIX 時(shí)間戳,對(duì)應(yīng) POSIX stat.st_mtime
        */
        lastModifiedTime: number;
        /**
         * 判斷當(dāng)前文件是否一個(gè)目錄
         */
        isDirectory(): boolean;
        /**
         * 判斷當(dāng)前文件是否一個(gè)普通文件
         */
        isFile(): boolean;
    }

    /**
     * 獲取全局唯一的文件管理器
     */
    function getFileSystemManager(): FileSystemManager;

    /** 打開另一個(gè)小程序*/
    function navigateToMiniProgram(object: {
        appId: string,
        path?: string,
        extraData?: {},
        envVersion?: string,
        success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /**
     * 用戶信息
     */
    interface UserInfo {
        /** 用戶昵稱*/
        nickName: string;
        /** 用戶頭像圖片的 URL夜只。URL 最后一個(gè)數(shù)值代表正方形頭像大欣菰凇(有 0、46扔亥、64场躯、96、132 數(shù)值可選旅挤,0 代表 640x640 的正方形頭像踢关,46 表示 46x46 的正方形頭像,剩余數(shù)值以此類推粘茄。默認(rèn)132)签舞,用戶沒有頭像時(shí)該項(xiàng)為空。若用戶更換頭像柒瓣,原有頭像 URL 將失效瘪菌。*/
        avatarUrl: string;
        /** 用戶性別*/
        gender: 0 | 1 | 2;
        /** 用戶所在國(guó)家*/
        country: string;
        /** 用戶所在省份*/
        province: string;
        /** 用戶所在城市*/
        city: string;
        /** 顯示 country,province嘹朗,city 所用的語言*/
        language: 'en' | 'zh_CN' | 'zh_TW'
    }

    /**
     * 調(diào)用前需要 用戶授權(quán) scope.userInfo师妙。
     * 獲取用戶信息。
     */
    function getUserInfo(object: {
        withCredentials?: boolean, lang?: string, success?: (res: {
            ?
            userInfo: UserInfo,
            rawData: string,
            signature: string,
            encryptedData: string,
            iv: string
        }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /** 用戶信息按鈕*/
    interface UserInfoButton {
        /** 按鈕的類型*/
        type: 'text' | 'image';
        /** 按鈕上的文本屹培,僅當(dāng) type 為 text 時(shí)有效*/
        text: string;
        /** 按鈕的背景圖片默穴,僅當(dāng) type 為 image 時(shí)有效*/
        image: string;
        /** 按鈕的樣式*/
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: string,
            fontSize: number,
            lineHeight: number
        },
        /** 顯示用戶信息按鈕*/
        show();

        /** 隱藏用戶信息按鈕怔檩。*/
        hide();

        /** 銷毀用戶信息按鈕*/
        destroy();

        /** 監(jiān)聽用戶信息按鈕的點(diǎn)擊事件*/
        onTap(callback: (res: {
            userInfo: UserInfo,
            rawData: string,
            signature: string,
            encryptedData: string,
            iv: string
        }) => void);

        /** 取消監(jiān)聽用戶信息按鈕的點(diǎn)擊事件*/
        offTap(callback: () => void);
    }

    /** 創(chuàng)建用戶信息按鈕*/
    function createUserInfoButton(object: {
        type: "text" | "image",
        text?: string,
        image?: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            color?: string
            backgroundColor?: string,
            borderColor?: string,
            borderWidth?: number,
            borderRadius?: number,
            textAlign?: "left" | "center" | "right",
            fontSize?: number,
            lineHeight?: number
        },
        withCredentials?: boolean,
        lang?: "en" | "zh_CN" | "zh_TW"
    }): UserInfoButton;

    /**
     * 通過 wx.login 接口獲得的用戶登錄態(tài)擁有一定的時(shí)效性。用戶越久未使用小程序蓄诽,用戶登錄態(tài)越有可能失效薛训。反之如果用戶一直在使用小程序,則用戶登錄態(tài)一直保持有效仑氛。具體時(shí)效邏輯由微信維護(hù)乙埃,對(duì)開發(fā)者透明。開發(fā)者只需要調(diào)用 wx.checkSession 接口檢測(cè)當(dāng)前用戶登錄態(tài)是否有效锯岖。登錄態(tài)過期后開發(fā)者可以再調(diào)用 wx.login 獲取新的用戶登錄態(tài)介袜。
     */
    function checkSession(object: { success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 提前向用戶發(fā)起授權(quán)請(qǐng)求。調(diào)用后會(huì)立刻彈窗詢問用戶是否同意授權(quán)小程序使用某項(xiàng)功能或獲取用戶的某些數(shù)據(jù)出吹,但不會(huì)實(shí)際調(diào)用對(duì)應(yīng)接口遇伞。如果用戶之前已經(jīng)同意授權(quán),則不會(huì)出現(xiàn)彈窗捶牢,直接返回成功鸠珠。更多用法詳見 用戶授權(quán)。*/
    function authorize(object: { scope: string, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 調(diào)用接口獲取登錄憑證(code)進(jìn)而換取用戶登錄態(tài)信息秋麸,包括用戶的唯一標(biāo)識(shí)(openid) 及本次登錄的 會(huì)話密鑰(session_key)等渐排。用戶數(shù)據(jù)的加解密通訊需要依賴會(huì)話密鑰完成。
     */
    function login(object: { timeout?: number, success?: (res: { code: string }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 只有開放數(shù)據(jù)域能調(diào)用灸蟆,獲取主域和開放數(shù)據(jù)域共享的 sharedCanvas
     */
    function getSharedCanvas(): Canvas;

    /** 托管的 KV 數(shù)據(jù)*/
    interface KVData {
        /** 數(shù)據(jù)的 key*/
        key: string;
        /** 數(shù)據(jù)的 value*/
        value: string;
    }

    /** 托管數(shù)據(jù)*/
    interface UserGameData {
        /** 用戶的微信頭像 url*/
        avatarUrl: string;
        /** 用戶的微信昵稱*/
        nickname: string;
        /** 用戶的 openid*/
        openid: string;
        /** 用戶的托管 KV 數(shù)據(jù)列表*/
        KVDataList: Array<KVData>;
    }

    /**
     * 拉取當(dāng)前用戶所有同玩好友的托管數(shù)據(jù)驯耻。該接口只可在開放數(shù)據(jù)域下使用
     */
    function getFriendCloudStorage(object: { keyList: string[], success?: (res: { data: Array<UserGameData> }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 在小游戲是通過群分享卡片打開的情況下,可以通過調(diào)用該接口獲取群同玩成員的游戲數(shù)據(jù)次乓。該接口只可在開放數(shù)據(jù)域下使用吓歇。
     */
    function getGroupCloudStorage(object: { shareTicket: string, keyList: string[], success?: (res: { data: Array<UserGameData> }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 獲取當(dāng)前用戶托管數(shù)據(jù)當(dāng)中對(duì)應(yīng) key 的數(shù)據(jù)孽水。該接口只可在開放數(shù)據(jù)域下使用
     */
    function getUserCloudStorage(object: { keyList: Array<string>, success?: (res: { KVDataList: Array<KVData> }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 刪除用戶托管數(shù)據(jù)當(dāng)中對(duì)應(yīng) key 的數(shù)據(jù)票腰。
     */
    function removeUserCloudStorage(object: { keyList: string[], success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /**
     * 對(duì)用戶托管數(shù)據(jù)進(jìn)行寫數(shù)據(jù)操作,允許同時(shí)寫多組 KV 數(shù)據(jù)女气。
     */
    function setUserCloudStorage(object: { KVDataList: Array<KVData>, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void;

    /** 在無須用戶授權(quán)的情況下杏慰,批量獲取用戶信息。該接口只在開放數(shù)據(jù)域下可用*/
    function getUserInfo(object: {
        /** 要獲取信息的用戶的 openId 數(shù)組炼鞠,如果要獲取當(dāng)前用戶信息缘滥,則將數(shù)組中的一個(gè)元素設(shè)為 'selfOpenId'*/
        openIdList?: Array<string>,
        /** 顯示用戶信息的語言*/
        lang?: 'en' | 'zh_CN' | 'zh_TW',
        success?: (res: {
            data: Array<{
                avatarUrl: string,
                city: string,
                country: string,
                gender: number,
                language: string,
                nickName: string,
                openId: string,
                province: string
            }>
        }) => void, fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /**
     * 監(jiān)聽主域發(fā)送的消息
     */
    function onMessage(callback: () => void): void;

    /** 開放數(shù)據(jù)域?qū)ο?/
    interface OpenDataContext {
        /** 開放數(shù)據(jù)域和主域共享的 sharedCanvas*/
        canvas: Canvas;
        /**
         * 向開放數(shù)據(jù)域發(fā)送消息
         * @param message {} 要發(fā)送的消息,message 中及嵌套對(duì)象中 key 的 value 只能是 primitive value谒主。即 number朝扼、string、boolean霎肯、null擎颖、undefined榛斯。
         */
        postMessage(message: {}): void;
    }

    /**
     * 獲取開放數(shù)據(jù)域
     */
    function getOpenDataContext(): OpenDataContext;

    /**
     * 根據(jù)用戶當(dāng)天游戲時(shí)間判斷用戶是否需要休息
     */
    function checkIsUserAdvisedToRest(object: {
        todayPlayedTime: number,
        success?: (res: { result: boolean }) => void,
        fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /**用戶點(diǎn)擊后打開意見反饋頁面的按鈕 */
    interface FeedbackButton {
        /** 按鈕的類型*/
        type: 'text' | 'image';
        text: string,
        image: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: 'left' | 'center' | 'right',
            fontSize: number,
            lineHeight: number
        },

        /** 顯示意見反饋按鈕*/
        show(): void;

        /** 隱藏意見反饋按鈕。*/
        hide(): void;

        /** 銷毀意見反饋按鈕*/
        destroy(): void;

        /** 監(jiān)聽意見反饋按鈕的點(diǎn)擊事件*/
        onTap(callback: () => void): void;

        /** 取消監(jiān)聽意見反饋按鈕的點(diǎn)擊事件*/
        offTap(callback: () => void): void;
    }
    /**
     * 創(chuàng)建打開意見反饋頁面的按鈕
     */
    function createFeedbackButton(object: {
        type: 'text' | 'image',
        text?: string,
        image?: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: 'left' | 'center' | 'right',
            fontSize: number,
            lineHeight: number
        }
    }): FeedbackButton;

    /** 用戶授權(quán)設(shè)置信息搂捧,詳情參考權(quán)限*/
    interface AuthSetting {
        /** 是否授權(quán)用戶信息驮俗,對(duì)應(yīng)接口 wx.getUserInfo*/
        userInfo: boolean;
        /** 是否授權(quán)地理位置,對(duì)應(yīng)接口 wx.getLocation*/
        userLocation: boolean;
        /** 是否授權(quán)微信運(yùn)動(dòng)步數(shù)允跑,對(duì)應(yīng)接口 wx.getWeRunData*/
        werun: boolean;
        /** 是否授權(quán)保存到相冊(cè) wx.saveImageToPhotosAlbum*/
        writePhotosAlbum: boolean;
    }

    /** 調(diào)起客戶端小程序設(shè)置界面王凑,返回用戶設(shè)置的操作結(jié)果。設(shè)置界面只會(huì)出現(xiàn)小程序已經(jīng)向用戶請(qǐng)求過的權(quán)限聋丝。*/
    function openSetting(object: {
        success?: (res: { authSetting: AuthSetting }) => void,
        fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /** 獲取用戶的當(dāng)前設(shè)置索烹。返回值中只會(huì)出現(xiàn)小程序已經(jīng)向用戶請(qǐng)求過的權(quán)限。*/
    function getSetting(object: {
        success?: (res: { authSetting: AuthSetting }) => void,
        fail?: (res?: any) => void, complete?: (res?: any) => void
    }): void;

    /**
     * 用戶點(diǎn)擊后打開設(shè)置頁面的按鈕
     */
    interface OpenSettingButton {
        type: 'text' | 'image';
        text: string,
        image: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: 'left' | 'center' | 'right',
            fontSize: number,
            lineHeight: number
        },

        show(): void;

        hide(): void;

        destroy(): void;

        onTap(callback: () => void): void;

        offTap(callback: () => void): void;
    }

    /** 創(chuàng)建打開設(shè)置頁面的按鈕*/
    function createOpenSettingButton(object: {
        type: 'text' | 'image',
        text?: string,
        image?: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: 'left' | 'center' | 'right',
            fontSize: number,
            lineHeight: number
        },
        show(): void;

        hide(): void;

        destroy(): void;

        onTap(callback: () => void): void;

        offTap(callback: () => void): void;
    }): OpenSettingButton;

    /** 游戲圈按鈕潮针。游戲圈按鈕被點(diǎn)擊后會(huì)跳轉(zhuǎn)到小游戲的游戲圈术荤。更多關(guān)于游戲圈的信息見 游戲圈使用指南*/
    interface GameClubButton {
        type: 'text' | 'image',
        text?: string,
        image?: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: 'left' | 'center' | 'right',
            fontSize: number,
            lineHeight: number
        },
        icon: 'green' | 'white' | 'dark' | 'light'
    }

    /** 創(chuàng)建游戲圈按鈕。游戲圈按鈕被點(diǎn)擊后會(huì)跳轉(zhuǎn)到小游戲的游戲圈每篷。更多關(guān)于游戲圈的信息見 游戲圈使用指南*/
    function createGameClubButton(object: {
        type: 'text' | 'image',
        text?: string,
        image?: string,
        style: {
            left: number,
            top: number,
            width: number,
            height: number,
            backgroundColor: string,
            borderColor: string,
            borderWidth: number,
            borderRadius: number,
            textAlign: 'left' | 'center' | 'right',
            fontSize: number,
            lineHeight: number
        },
        icon: 'green' | 'white' | 'dark' | 'light'
    }): GameClubButton;

    /** 進(jìn)入客服會(huì)話瓣戚。要求在用戶發(fā)生過至少一次 touch 事件后才能調(diào)用。后臺(tái)接入方式與小程序一致焦读,詳見 客服消息接入*/
    function openCustomerServiceConversation(object: {
        sessionFrom?: string,
        showMessageCard?: boolean,
        sendMessageTitle?: string,
        sendMessagePath?: string,
        sendMessageImg?: string,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 獲取用戶過去三十天微信運(yùn)動(dòng)步數(shù)子库。需要先調(diào)用 wx.login 接口。步數(shù)信息會(huì)在用戶主動(dòng)進(jìn)入小程序時(shí)更新矗晃。*/
    function getWeRunData(object: {
        success?: (res: { encryptedData: string, iv: string }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 取消監(jiān)聽橫豎屏切換事件*/
    function offDeviceOrientationChange(callback: () => void): void;

    /** 監(jiān)聽橫豎屏切換事件*/
    function onDeviceOrientationChange(callback: (res: { value: 'portrait' | 'landscape' | 'landscapeReverse' }) => void): void;

    /** 監(jiān)聽加速度數(shù)據(jù)事件仑嗅。頻率根據(jù) wx.startAccelerometer() 的 interval 參數(shù)≌胖ⅲ可使用 wx.stopAccelerometer() 停止監(jiān)聽仓技。*/
    function onAccelerometerChange(callback: (res: { x: number, y: number, z: number }) => void): void;

    /** 停止監(jiān)聽加速度數(shù)據(jù)。*/
    function stopAccelerometer(object: {
        success?: (res: { encryptedData: string, iv: string }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 開始監(jiān)聽加速度數(shù)據(jù)俗他。*/
    function startAccelerometer(object: {
        interval: string,
        success?: (res: { encryptedData: string, iv: string }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 獲取設(shè)備電量
     */
    function getBatteryInfo(object: {
        success?: (res: { level: string, isCharging: boolean }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * wx.getBatteryInfo 的同步版本
     */
    function getBatteryInfoSync(): { level: string, isCharging: boolean };

    /** 獲取系統(tǒng)剪貼板的內(nèi)容*/
    function getClipboardData(object: {
        success?: (res: { data: string }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 設(shè)置系統(tǒng)剪貼板的內(nèi)容*/
    function setClipboardData(object: {
        data: string,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 監(jiān)聽羅盤數(shù)據(jù)脖捻,頻率:5 次/秒,接口調(diào)用后會(huì)自動(dòng)開始監(jiān)聽兆衅,可使用 wx.stopCompass 停止監(jiān)聽地沮。
     * accuracy 在 iOS/Android 的差異
     * 由于平臺(tái)差異,accuracy 在 iOS/Android 的值不同羡亩。
     * iOS:accuracy 是一個(gè) number 類型的值摩疑,表示相對(duì)于磁北極的偏差。0 表示設(shè)備指向磁北畏铆,90 表示指向東雷袋,180 表示指向南,依此類推辞居。
     * Android:accuracy 是一個(gè) string 類型的枚舉值楷怒。
     */
    function onCompassChange(callback: (res: { direction: number, accuracy: number | string }) => void): void;

    /**
     * 開始監(jiān)聽陀螺儀數(shù)據(jù)寨腔。
     */
    function startCompass(object: {
        interval?: string,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 停止監(jiān)聽陀螺儀數(shù)據(jù)。
     */
    function stopCompass(object: {
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 監(jiān)聽設(shè)備方向變化事件率寡。頻率根據(jù) wx.startDeviceMotionListening() 的 interval 參數(shù)迫卢。可以使用 wx.stopDeviceMotionListening() 停止監(jiān)聽冶共。
     */
    function onDeviceMotionChange(callback: (res: {
        alpha: number,
        beta: number,
        gamma: number,
    }) => void): void;

    /** 停止監(jiān)聽設(shè)備方向的變化乾蛤。*/
    function stopDeviceMotionListening(
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    ): void;

    /** 開始監(jiān)聽設(shè)備方向的變化。*/
    function startDeviceMotionListening(
        interval: string,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    ): void;

    /** 監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化事件*/
    function onNetworkStatusChange(callback: (res: { isConnected: boolean, networkType: string }) => void): void;

    /** 獲取網(wǎng)絡(luò)類型*/
    function getNetworkType(object: {
        success?: (res: { networkType: string }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 使手機(jī)發(fā)生較長(zhǎng)時(shí)間的振動(dòng)(400 ms)*/
    function vibrateLong(object: {
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 使手機(jī)發(fā)生較短時(shí)間的振動(dòng)(15 ms)捅僵。僅在 iPhone 7 / 7 Plus 以上及 Android 機(jī)型生效*/
    function vibrateShort(object: {
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 
     * 監(jiān)聽內(nèi)存不足告警事件家卖。
     * 當(dāng) iOS/Android 向小程序進(jìn)程發(fā)出內(nèi)存警告時(shí),觸發(fā)該事件庙楚。觸發(fā)該事件不意味小程序被殺上荡,大部分情況下僅僅是告警,開發(fā)者可在收到通知后回收一些不必要資源避免進(jìn)一步加劇內(nèi)存緊張馒闷。
     */
    function onMemoryWarning(callback: (res: { level: number }) => void): void;

    /** 設(shè)置屏幕亮度*/
    function setScreenBrightness(object: {
        value: number,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 設(shè)置是否保持常亮狀態(tài)酪捡。僅在當(dāng)前小程序生效,離開小程序后設(shè)置失效纳账。*/
    function setKeepScreenOn(object: {
        keepScreenOn: boolean,
        success?: (res?: any) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /** 獲取屏幕亮度*/
    function getScreenBrightness(object: {
        success?: (res: { value: number }) => void,
        fail?: (res?: any) => void,
        complete?: (res?: any) => void
    }): void;

    /**
     * 對(duì)于游戲來說逛薇,每幀 16ms 是極其寶貴的,如果有一些可以異步處理的任務(wù)疏虫,可以放置于 Worker 中運(yùn)行永罚,待運(yùn)行結(jié)束后,再把結(jié)果返回到主線程卧秘。Worker 運(yùn)行于一個(gè)單獨(dú)的全局上下文與線程中呢袱,不能直接調(diào)用主線程的方法,Worker 也不具備渲染的能力翅敌。 Worker 與主線程之間的數(shù)據(jù)傳輸羞福,雙方使用 Worker.postMessage() 來發(fā)送數(shù)據(jù),Worker.onMessage() 來接收數(shù)據(jù)哼御,傳輸?shù)臄?shù)據(jù)并不是直接共享坯临,而是被復(fù)制的焊唬。
     * @see https://developers.weixin.qq.com/minigame/dev/tutorial/usability/worker.html
     */
    interface Worker {
        /**
         * 監(jiān)聽接收主線程/Worker 線程向當(dāng)前線程發(fā)送的消息
         */
        onMessage(callback: (res: { message: Object }) => void): void;
        /**
         * 向主線程/Worker 線程發(fā)送的消息恋昼。
         */
        postMessage(message: {}): void;
        /**
         * 結(jié)束當(dāng)前 worker 線程,僅限在主線程 worker 對(duì)象上調(diào)用赶促。
         */
        terminate(): void;
    }

    /**
     * 創(chuàng)建一個(gè) Worker 線程液肌,目前限制最多只能創(chuàng)建一個(gè) Worker,創(chuàng)建下一個(gè) Worker 前請(qǐng)調(diào)用 Worker.terminate
     */
    function createWorker(scriptPath: string): Worker;

    /**
     * 云開發(fā)小程序端
     */
    namespace cloud {

        /** 在調(diào)用云開發(fā)各 API 前鸥滨,需先調(diào)用初始化方法 init 一次(全局只需一次嗦哆,多次調(diào)用時(shí)只有第一次生效)*/
        function init(options?: { env?: string | { database?: string, storage?: string, functions?: string }, traceUser?: false }): void;

        /** 調(diào)用云函數(shù)*/
        function callFunction(obj: { name: string, data?: Object, config?: cloudEnvType, success: (res: { errMsg: string, result: any, requestID: string }) => void, fail?: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function callFunction(obj: { name: string, data?: Object, config?: cloudEnvType, success?: (res: { errMsg: string, result: any, requestID: string }) => void, fail: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function callFunction(obj: { name: string, data?: Object, config?: cloudEnvType, success?: (res: { errMsg: string, result: any, requestID: string }) => void, fail?: cloudCallFailType, complete: cloudEmptyFunction }): void;
        function callFunction(obj: { name: string, data?: Object, config?: cloudEnvType }): Promise<{ errMsg: string, result: any, requestID: string }>;

        /** 將本地資源上傳至云存儲(chǔ)空間谤祖,如果上傳至同一路徑則是覆蓋寫*/
        function uploadFile(obj: { cloudPath: string, filePath: string, header?: Object, config?: cloudEnvType, success: (res: { fileID: string, statusCode: number, errMsg: string }) => void, fail?: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function uploadFile(obj: { cloudPath: string, filePath: string, header?: Object, config?: cloudEnvType, success?: (res: { fileID: string, statusCode: number, errMsg: string }) => void, fail: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function uploadFile(obj: { cloudPath: string, filePath: string, header?: Object, config?: cloudEnvType, success?: (res: { fileID: string, statusCode: number, errMsg: string }) => void, fail?: cloudCallFailType, complete: cloudEmptyFunction }): void;
        function uploadFile(obj: { cloudPath: string, filePath: string, header?: Object, config?: cloudEnvType }): Promise<{ fileID: string, statusCode: number, errMsg: string }>;

        /** 從云存儲(chǔ)空間下載文件*/
        function downloadFile(obj: { fileID: string, config?: cloudEnvType, success: (res: { tempFilePath: string, statusCode: number, errMsg: string }) => void, fail?: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function downloadFile(obj: { fileID: string, config?: cloudEnvType, success?: (res: { tempFilePath: string, statusCode: number, errMsg: string }) => void, fail: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function downloadFile(obj: { fileID: string, config?: cloudEnvType, success?: (res: { tempFilePath: string, statusCode: number, errMsg: string }) => void, fail?: cloudCallFailType, complete: cloudEmptyFunction }): void;
        function downloadFile(obj: { cloudPath: string, filePath: string, header?: Object, config?: cloudEnvType }): Promise<{ tempFilePath: string, statusCode: number, errMsg: string }>;

        /** 用云文件 ID 換取真實(shí)鏈接,可自定義有效期老速,默認(rèn)一天且最大不超過一天粥喜。一次最多取 50 個(gè)。*/
        function getTempFileURL(obj: { fileList: string[], config?: cloudEnvType, success: (fileList: Array<{ fileID: string, tempFileURL: string, status: number, errMsg: string }>) => void, fail?: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function getTempFileURL(obj: { fileList: string[], config?: cloudEnvType, success?: (fileList: Array<{ fileID: string, tempFileURL: string, status: number, errMsg: string }>) => void, fail: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function getTempFileURL(obj: { fileList: string[], config?: cloudEnvType, success?: (fileList: Array<{ fileID: string, tempFileURL: string, status: number, errMsg: string }>) => void, fail?: cloudCallFailType, complete: cloudEmptyFunction }): void;
        function getTempFileURL(obj: { fileList: string[], config?: cloudEnvType }): Promise<Array<{ fileID: string, tempFileURL: string, status: number, errMsg: string }>>;

        /** 從云存儲(chǔ)空間刪除文件橘券,一次最多 50 個(gè)*/
        function deleteFile(obj: { fileList: string[], config?: cloudEnvType, success: (fileList: Array<{ fileID: string, status: number, errMsg: string }>) => void, fail?: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function deleteFile(obj: { fileList: string[], config?: cloudEnvType, success?: (fileList: Array<{ fileID: string, status: number, errMsg: string }>) => void, fail: cloudCallFailType, complete?: cloudEmptyFunction }): void;
        function deleteFile(obj: { fileList: string[], config?: cloudEnvType, success?: (fileList: Array<{ fileID: string, status: number, errMsg: string }>) => void, fail?: cloudCallFailType, complete: cloudEmptyFunction }): void;
        function deleteFile(obj: { fileList: string[], config?: cloudEnvType }): Promise<Array<{ fileID: string, status: number, errMsg: string }>>;

        //============== 數(shù)據(jù)庫 API 手動(dòng)添加的额湘,可能有錯(cuò)誤,請(qǐng) pr==============
        function database(options?: cloudEnvType): Database;
    }
}

/** */
type cloudEnvType = { env: string }
/** */
type cloudCallFailType = (err: { errCode: string, errMsg: string }) => void;
/** */
type cloudEmptyFunction = () => void;

interface Database {
    command: Command;
    serverDate(options?: object): ServerDate;
    Geo: Geo;
    createCollection: Promise<CreateCollectionSuccess>;
    collection(name: string): Collection;
    RegExp(options: RegExpOptions): DBRegExp;
}

type DBRegExp = RegExp;

type ServerDate = Date;

interface RegExpOptions {
    regexp: string; // 正則表達(dá)式旁舰,字符串形式
    options: "i" | "m" | "s"; // flags锋华,包括 i, m, s 但前端不做強(qiáng)限制
}

interface Query {
    get(): Promise<GetCollectionResult>;
    update(options: CommonOption): Promise<UpateCollectionResult>;
    remove(): Promise<RemoveCollectionResult>;
    count(): Promise<CountCollectionResult>;
    orderBy(fieldName: string, order: "asc" | "desc"): Collection | Query;
    limit(max: number): Collection | Query;
    skip(offset: number): Collection | Query;
    field(definition: object): Collection | Query | Document;
}

interface Collection extends Query {
    doc(id: string | number): Document;
    add(options: CommonOption): Promise<AddCollectionResult>;
    where(rule: object): Query;

    aggregate(): Aggregate;
}

interface CommonOption<T = any> {
    data: T;
}

interface GetCollectionResult {
    data: any[];
}

interface AddCollectionResult {
    _id: string | number;
}

interface UpateCollectionResult {
    stats: {
        updated: number;
    };
}

interface RemoveCollectionResult {
    stats: {
        removed: number;
    };
}

interface CountCollectionResult {
    stats: {
        total: number;
    };
}

interface Document {
    get(): Promise<{ data: any }>;
    update(options: CommonOption): Promise<{ stats: { updated: 0 | 1 } }>;
    set(
        options: CommonOption
    ): Promise<{
        _id: string | number;
        stats: { updated: 0 | 1; created: 0 | 1 };
    }>;
    remove(): Promise<{ stats: { removed: 0 | 1 } }>;
}

// collection(name: string): Collection
interface Command {
    eq(value: any): Command;
    neq(value: any): Command;
    lt(value: number): Command;
    lte(value: number): Command;
    gt(value: number): Command;
    gte(value: number): Command;
    in(values: any[]): Command;
    nin(values: any[]): Command;
    and(command: Command): Command;
    and(...commands: Command[]): Command;
    or(command: Command | CrosFieldCommand[]): Command;
    or(...commands: Command[]): Command;
    set(value: any): Command;
    remove(): Command;
    inc(value: number): Command;
    mul(value: number): Command;
    push(values: any[]): Command;
    pop(): Command;
    shift(): Command;
    unshift(values: any[]): Command;

    geoNear(options: GeoNearOptions): Command;
    geoWithin(options: GeoWithinOptions): Command;
    geoIntersects(options: GeoIntersectsOptions): Command;

    // aggregate: AggregationOperators
    aggregate: any;
}

interface CrosFieldCommand {
    [filed: string]: Command | boolean;
}

interface GeoNearOptions {
    geometry: Point; // 點(diǎn)的地理位置
    maxDistance?: number; // 選填,最大距離箭窜,單位為米
    minDistance?: number; // 選填毯焕,最小距離,單位為米
}

interface GeoWithinOptions {
    geometry: Polygon | MultiPolygon;
}

interface GeoIntersectsOptions {
    geometry:
    | Point
    | LineString
    | MultiPoint
    | MultiLineString
    | Polygon
    | MultiPolygon; // 地理位置
}

interface Geo {
    Point: Point;
    LineString: LineString;
    Polygon: Polygon;
}

interface Point {
    (longitude: number, latitude: number): Point;
}

type PointCoordinates = [number, number];

interface Point {
    type: "Point";
    coordinates: PointCoordinates;
}

interface LineString {
    (points: Point[]): LineString;
}

interface LineString {
    type: "LineString";
    coordinates: PointCoordinates[];
}

interface Polygon {
    (lineStrings: LineString[]): Polygon;
}

interface Polygon {
    type: "Polygon";
    coordinates: PointCoordinates[][];
}

interface MultiPoint {
    (points: Point[]): MultiPoint;
}

interface MultiPoint {
    type: "MultiPoint";
    coordinates: PointCoordinates[];
}

interface MultiLineString {
    (polygons: LineString[]): MultiLineString;
}

interface MultiLineString {
    type: "MultiLineString";
    coordinates: PointCoordinates[][];
}

interface MultiPolygon {
    (polygons: Polygon[]): MultiPolygon;
}

interface MultiPolygon {
    type: "MultiPolygon";
    coordinates: PointCoordinates[][][];
}

// interface GeoJSON<T> {
//     type: T;
//     coordinates: [];
// }

interface CreateCollectionSuccess {
    errMsg: string;
}

interface Aggregate {
    addFields(fieldObj: { [fieldName: string]: any }): Aggregate;
    bucket(bucketObj: {
        groupBy: any;
        boundaries: any[];
        default?: any;
        output?: object;
    }): Aggregate;
    bucketAuto(bucketObj: {
        groupBy: any;
        buckets: number;
        granularity?: any;
        output?: object;
    }): Aggregate;
    count(expr: string): any;
    geoNear(geoNearObj: {
        near: Point;
        spherical: true;
        limit?: number;
        maxDistance?: number;
        minDistance?: number;
        query?: object;
        distanceMultiplier?: number;
        distanceField: string;
        includeLocs?: string;
        key?: string;
    }): Aggregate;
    group(groupObj: { _id: any;[fieldName: string]: any }): Aggregate;
    limit(limitRecords: number): any;
    match(matchObj: { [fieldName: string]: any }): Aggregate;
    project(projectObj: { [fieldName: string]: any }): Aggregate;
    replaceRoot(replaceRootObj: { newRoot: any }): Aggregate;
    sample(replaceRootObj: { size: number }): Aggregate;
    skip(skipNum: number): any;
    sort(replaceRootObj: { [fieldName: string]: 1 | -1 }): Aggregate;
    sortByCount(fieldName: string): Aggregate;
    unwind(unwindObj: {
        path: string;
        includeArrayIndex?: string;
        preserveNullAndEmptyArrays?: boolean;
    }): Aggregate;
    end(): void;
}

// type
interface AggregationOperators {
    abs(operand: number): number;
    add(...operand: any[]): any;
    addToSet(expression: string): any;
    allElementsTrue(expression: [string]): boolean;
    and(expression: boolean[]): boolean;
    lt(expression: string, value: number): boolean;
    lte(expression: string, value: number): boolean;
    anyElementTrue(expression: [string]): boolean;
    arrayElemAt(expression: [string, number]): any;
    arrayToObject(expression: string): object;
    // arrayToObject(expression: [string, any][]): object
    // arrayToObject(expression: {k: string; v: any}[]): object
    avg(expression: string): number;
}

// /**
//  * 基礎(chǔ)庫 2.0.0 開始支持磺樱,低版本需做兼容處理纳猫。
//  * 將一個(gè) Canvas 對(duì)應(yīng)的 Texture 綁定到 WebGL 上下文。
//  */
// declare var WebGLRenderingContext: {
//     /**
//      * 
//      * @param texture WebGL 的紋理類型枚舉值
//      * @param canvas 需要綁定為 Texture 的 Canvas
//      */
//     wxBindCanvasTexture: (texture: number, canvas: wx.Canvas) => void
// }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竹捉,一起剝皮案震驚了整個(gè)濱河市续担,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌活孩,老刑警劉巖物遇,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異憾儒,居然都是意外死亡询兴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門起趾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗舰,“玉大人,你說我怎么就攤上這事训裆】舾” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵边琉,是天一觀的道長(zhǎng)属百。 經(jīng)常有香客問我,道長(zhǎng)变姨,這世上最難降的妖魔是什么族扰? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上渔呵,老公的妹妹穿的比我還像新娘怒竿。我一直安慰自己,他們只是感情好扩氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布耕驰。 她就那樣靜靜地躺著,像睡著了一般录豺。 火紅的嫁衣襯著肌膚如雪耍属。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天巩检,我揣著相機(jī)與錄音厚骗,去河邊找鬼。 笑死兢哭,一個(gè)胖子當(dāng)著我的面吹牛领舰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迟螺,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼冲秽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了矩父?” 一聲冷哼從身側(cè)響起锉桑,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窍株,沒想到半個(gè)月后民轴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡球订,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年后裸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冒滩。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡微驶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出开睡,到底是詐尸還是另有隱情因苹,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布篇恒,位于F島的核電站扶檐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏婚度。R本人自食惡果不足惜蘸秘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝗茁。 院中可真熱鬧醋虏,春花似錦、人聲如沸哮翘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭寺。三九已至阻课,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艰匙,已是汗流浹背限煞。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留员凝,地道東北人署驻。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像健霹,于是被迫代替她去往敵國(guó)和親旺上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344