From ca2ddc81136af7fb3d34962624ac5bc8b7f521cb Mon Sep 17 00:00:00 2001 From: agasbzj Date: Thu, 20 Jul 2017 16:08:31 +0800 Subject: [PATCH] =?UTF-8?q?Init=20types=20for=20wx=EF=BC=88=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=EF=BC=89js=20sdk=20(#18207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Init types for wx(微信)js sdk * rename to wx-js-sdk-dt * fix lint errors * Change some definitions and add some tests. * Update comments * Update comments * Fix a type error and update comments --- types/wx-js-sdk-dt/index.d.ts | 626 +++++++++++++++++++++++ types/wx-js-sdk-dt/tsconfig.json | 22 + types/wx-js-sdk-dt/tslint.json | 1 + types/wx-js-sdk-dt/wx-js-sdk-dt-tests.ts | 127 +++++ 4 files changed, 776 insertions(+) create mode 100644 types/wx-js-sdk-dt/index.d.ts create mode 100644 types/wx-js-sdk-dt/tsconfig.json create mode 100644 types/wx-js-sdk-dt/tslint.json create mode 100644 types/wx-js-sdk-dt/wx-js-sdk-dt-tests.ts diff --git a/types/wx-js-sdk-dt/index.d.ts b/types/wx-js-sdk-dt/index.d.ts new file mode 100644 index 0000000000..ec93e37efa --- /dev/null +++ b/types/wx-js-sdk-dt/index.d.ts @@ -0,0 +1,626 @@ +// Type definitions for wx-js-sdk 1.2 +// Project: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 +// Definitions by: Bian Zhongjie +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace wx { + /** + * 微信配置对象 + */ + interface WxConfig { + /** + * 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。 + */ + debug?: boolean; + + /** + * 公众号的唯一标识 + */ + appId: string; + + /** + * 签名的时间戳 + */ + timestamp: number; + + /** + * 签名的随机串 + */ + nonceStr: string; + + /** + * 签名 + */ + signature: string; + + /** + * 需要使用的JS接口列表 + */ + jsApiList: string[]; + } + + /** + * 初始化,做任何操作前必须调用该方法 + * @param setting 配置对象 + */ + function config(setting: WxConfig): void; + + /** + * 配置微信初始化成功后的回调 + * @param x 回调 + */ + function ready(x: () => void ): void; + + /** + * 配置微信初始化失败后的回调 + * @param err 失败回调 + */ + function error(err: (res: any) => void): void; + + /** + * 判断当前客户端版本是否支持指定 JS 接口, checkJsApi 接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用 checkJsApi 来检测 + */ + interface CheckApiConfig { + /** + * 需要检测的JS接口列表 + */ + jsApiList: string[]; + + /** + * 以键值对的形式返回,可用的 api 值 true,不可用为 false + * 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} + */ + success(res: { checkResult: { [methodName: string]: boolean }, errMsg: { msg: string } }): void; + } + + /** + * 判断当前客户端版本是否支持指定 JS 接口 + */ + function checkJsApi(setting: CheckApiConfig): void; + + interface ShareTimelineConfig { + /** + * 分享标题 + */ + title: string; + + /** + * 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致 + */ + link: string; + + /** + * 分享图标 + */ + imgUrl?: string; + + /** + * 分享成功后的回调 + */ + success?(): void; + + /** + * 分享失败后的回调 + */ + cancel?(): void; + } + + /** + * 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareTimeline(setting: ShareTimelineConfig): void; + + /** + * 消息分享对象 + */ + interface SharedAppMessage extends ShareTimelineConfig { + /** + * 分享描述 + */ + desc: string; + + /** + * 分享类型, music、video 或 link,不填默认为 link + */ + type?: string; + + /** + * 如果 type 是 music 或 video,则要提供数据链接,默认为空 + */ + dataUrl?: string; + } + + /** + * 获取“分享给朋友”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareAppMessage(setting: SharedAppMessage): void; + + interface MenuShareQQ extends ShareTimelineConfig { + /** + * 分享描述 + */ + desc: string; + } + + /** + * “分享到QQ”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareQQ(config: MenuShareQQ): void; + + interface MenuShareWeibo extends ShareTimelineConfig { + /** + * 分享描述 + */ + desc: string; + } + + /** + * 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareWeibo(config: MenuShareWeibo): void; + + /** + * 获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareQzone(config: MenuShareWeibo): void; + + interface ChooseImageConfig { + /** + * 照片数,默认9 + */ + count?: number; + + /** + * 可以指定是原图还是压缩图,默认二者都有 + */ + sizeType?: string[]; + + /** + * 可以指定来源是相册还是相机,默认二者都有 + */ + sourceType?: string[]; + + /** + * 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片 + */ + success(res: { localIds: string[]}): void; + } + + /** + * 拍照或从手机相册中选图接口 + */ + function chooseImage(config: ChooseImageConfig): void; + + /** + * 显示照片预览用的配置对象 + */ + interface PreviewImageConfig { + /** + * 当前显示图片的 http 链接 + */ + current: string; + /** + * 需要预览的图片 http 链接列表 + */ + urls: string[]; + } + + /** + * 预览图片接口 + */ + function previewImage(config: PreviewImageConfig): void; + + interface UploadImageConfig { + /** + * 要上传的图片的本地 ID,由 chooseImage 接口获得 + */ + localId: string; + + /** + * 默认为1,显示进度提示 + */ + isShowProgressTips?: number; + + /** + * res: var serverId = res.serverId; 返回图片的服务器端 ID + */ + success(res: any): void; + } + + /** + * 上传图片 + */ + function uploadImage(config: UploadImageConfig): void; + + interface DownLoadImageConfig { + /** + * serverId: 需要下载的图片的服务器端ID,由 uploadImage 接口获得 + */ + serverId: string; + + isShowProgressTips?: number; + + /** + * var localId = res.localId; 返回图片下载后的本地 ID + */ + success?(res: { localId: string }): void; + } + + function downloadImage(config: DownLoadImageConfig): void; + + interface GetLocalImgDataConfig { + /** + * 图片的 localID + */ + localId: string; + + /** + * 成功后的回调, localData是图片的base64数据,可以用img标签显示 + */ + success(res: { localData: string} ): void; + } + + /** + * 获取本地图片接口,此接口仅在 iOS WKWebview 下提供,用于兼容 iOS WKWebview 不支持 localId 直接显示图片的问题 + */ + function getLocalImgData(config: GetLocalImgDataConfig): void; + + /** + * 开始录音 + */ + function startRecord(): void; + + /** + * 停止录音 + */ + function stopRecord(success: (res: {localId: string}) => void): void; + + /** + * 录音时间超过一分钟没有停止的时候会执行回调 + */ + function onVoiceRecordEnd(complete: (res: { localId: string }) => void): void; + + /** + * 播放音频 + */ + function playVoice(localId: string): void; + + /** + * 暂停音频 + */ + function pauseVoice(localId: string): void; + + /** + * 停止播放音频 + */ + function stopVoice(localId: string): void; + + /** + * 停止播放后的回调 + */ + function onVoicePlayEnd(success: (res: { localId: string }) => void): void; + + interface UploadVoiceConfig { + localId: string; + isShowProgressTips?: number; + success(res: any): void; + } + + /** + * 上传语音接口, 上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器, + */ + function uploadVoice(config: UploadVoiceConfig): void; + + interface downloadVoiceConfig { + /** + * 需要下载的音频的服务器端 ID,由 uploadVoice 接口获得 + */ + serverId: string; + + /** + * 默认为1,显示进度提示 + */ + isShowProgressTips?: number; + + /** + * 下载成功回调 + */ + success(res: any): void; + } + + function downloadVoice(config: downloadVoiceConfig): void; + + /** + * 识别音频并返回识别结果接口 + */ + function translateVoice(config: UploadVoiceConfig): void; + + /** + * 获取网络状态, var networkType = res.networkType; 返回网络类型 2g,3g,4g,wifi + */ + function getNetworkType(success: (res: { networkType: string }) => void): void; + + interface OpenLocationConfig { + latitude?: number; + longitude?: number; + + /** + * 位置名 + */ + name?: string; + + /** + * 地址详情说明 + */ + address?: string; + + /** + * 地图缩放级别,整形值,范围从1~28。默认为最大 + */ + scale?: number; + + /** + * 在查看位置界面底部显示的超链接, 可点击跳转 + */ + infoUrl?: string; + } + + /** + * 微信内置地图查看位置 + */ + function openLocation(config: OpenLocationConfig): void; + + interface Location { + latitude: number; + longitude: number; + + /** + * 速度,以米/每秒计 + */ + speed: number; + + /** + * 位置精度 + */ + accuracy: number; + } + + interface GetLocationConfig { + /** + * 默认为 wgs84 的 gps 坐标,如果要返回直接给 openLocation 用的火星坐标,可传入'gcj02' + */ + type?: string; + + success(res: Location): void; + } + + /** + * 获取地理位置接口 + */ + function getLocation(config: GetLocationConfig): void; + + interface StartSearchBeaconsConfig { + /** + * 摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面 + */ + ticket: string; + + /** + * 完成后的回调 + */ + complete(argv: any): void; + } + + /** + * 开启查找周边 ibeacon 设备接口 + */ + function startSearchBeacons(config: StartSearchBeaconsConfig): void; + + interface StopSearchBeaconsConfig { + complete(res: any): void; + } + + /** + * 关闭查找完成后的回调函数 + */ + function stopSearchBeacons(config: StopSearchBeaconsConfig): void; + + interface OnSearchBeaconsConfig { + complete(argv: any): void; + } + /** + * 监听周边 ibeacon 设备接口, + * 摇一摇周边接口使用注意事项及更多返回结果说明,请参考:摇一摇周边获取设备信息 + */ + function onSearchBeacons(config: OnSearchBeaconsConfig): void; + + /** + * 关闭当前网页窗口接口 + */ + function closeWindow(): void; + + interface MenuItemsConfig { + /** + * 要隐藏/显示的菜单项,只能隐藏“传播类”和“保护类”按钮 + */ + menuList: string[]; + } + + /** + * 批量隐藏功能按钮接口 + */ + function hideMenuItems(config: MenuItemsConfig): void; + + /** + * 批量显示功能按钮接口 + */ + function showMenuItems(config: MenuItemsConfig): void; + + /** + * 隐藏所有非基础按钮接口 + */ + function hideAllNonBaseMenuItem(): void; + + /** + * 显示所有功能按钮接口 + */ + function showAllNonBaseMenuItem(): void; + + interface ScanQRCodeConfig { + /** + * 默认为0,扫描结果由微信处理,1则直接返回扫描结果, + */ + needResult?: number; + + /** + * ["qrCode","barCode"], 可以指定扫二维码还是一维码,默认二者都有 + */ + scanType?: string[]; + + /** + * resultStr 是当 needResult 为 1 时,扫码返回的结果 + */ + success?(res: { resultStr: string }): void; + } + + /** + * 调起微信扫一扫接口 + */ + function scanQRCode(config: ScanQRCodeConfig): void; + + interface OpenProductSpecificViewConfig { + /** + * 商品id + */ + productId: string; + + /** + * 0.默认值,普通商品详情页; 1.扫一扫商品详情页; 2.小店商品详情页 + */ + viewType?: number; + } + + /** + * 跳转微信商品页接口 + */ + function openProductSpecificView(config: OpenProductSpecificViewConfig): void; + + interface ChooseCardConfig { + /** + * 门店Id + */ + shopId?: string; + + /** + * 卡券类型 + */ + cardType?: string; + + /** + * 卡券Id + */ + cardId?: string; + + /** + * 卡券签名时间戳 + */ + timestamp: number; + + /** + * 卡券签名随机串 + */ + nonceStr: string; + + /** + * 签名方式,默认'SHA1' + */ + signType: string; + + /** + * 卡券签名 + */ + cardSign: string; + + /** + * var cardList= res.cardList; 用户选中的卡券列表信息 + */ + success?(res: { cardList: Card[] }): void; + } + + /** + * 卡券对象 + */ + interface Card { + cardId: string; + cardExt: string; + } + + /** + * 拉取适用卡券列表并获取用户选择信息 + */ + function chooseCard(config: ChooseCardConfig): void; + + interface AddCardConfig { + cardList: Card[]; + success?(res: { cardList: Card[] }): void; + } + + /** + * 批量添加卡券接口 + */ + function addCard(config: AddCardConfig): void; + + class OpenCardObj { + cardId: string; + code: string; + } + + /** + * 需要打开的卡券列表 + */ + interface OpenCardConfig { + cardList: OpenCardObj[]; + } + + /** + * 查看微信卡包中的卡券接口 + */ + function openCard(config: OpenCardConfig): void; + + interface ChooseWXPayConfig { + /** + * 支付签名时间戳,注意微信jssdk中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的S字符 + */ + timestamp: number; + + /** + * 支付签名随机串,不长于 32 位 + */ + nonceStr: string; + + /** + * 统一支付接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** + */ + package: string; + + /** + * 签名方式,默认为'SHA1',使用新版支付需传入'MD5' + */ + signType?: string; + + /** + * 支付签名 + */ + paySign: string; + + /** + * 支付成功后的回调函数 + */ + success(res: any): void; + } + + /** + * 发起一个微信支付请求 + */ + function chooseWXPay(config: ChooseWXPayConfig): void; +} diff --git a/types/wx-js-sdk-dt/tsconfig.json b/types/wx-js-sdk-dt/tsconfig.json new file mode 100644 index 0000000000..780e3ab13c --- /dev/null +++ b/types/wx-js-sdk-dt/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "wx-js-sdk-dt-tests.ts" + ] +} diff --git a/types/wx-js-sdk-dt/tslint.json b/types/wx-js-sdk-dt/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/wx-js-sdk-dt/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } diff --git a/types/wx-js-sdk-dt/wx-js-sdk-dt-tests.ts b/types/wx-js-sdk-dt/wx-js-sdk-dt-tests.ts new file mode 100644 index 0000000000..deeb753b29 --- /dev/null +++ b/types/wx-js-sdk-dt/wx-js-sdk-dt-tests.ts @@ -0,0 +1,127 @@ +// No npm package for wx-js-sdk, source location is: https://res.wx.qq.com/open/js/jweixin-1.2.0.js + +wx.config({ + appId: '', + timestamp: 123, + nonceStr: '', + signature: '', + jsApiList: [''] +}); + +wx.ready(() => { +}); + +wx.error((res: any) => { +}); + +wx.checkJsApi({ + jsApiList: [''], + success: (res) => { + } +}); + +wx.onMenuShareAppMessage({ + desc: '', + title: '', + link: '', + imgUrl: '' +}); + +wx.onMenuShareTimeline({ + title: '', + link: '' +}); + +wx.scanQRCode({ +}); + +wx.closeWindow(); + +wx.downloadImage({ + serverId: '' +}); + +wx.addCard({ + cardList: [ + { + cardId: '', + cardExt: '' + } + ] +}); + +wx.chooseImage({ + success: (res) => { + res.localIds; + } +}); + +wx.chooseWXPay({ + timestamp: 0, + nonceStr: '', + package: '', + paySign: '', + success: (res) => {} +}); + +wx.getLocation({ + success: (res) => { + if (res) { + res.accuracy; + res.latitude; + res.longitude; + res.speed; + } + } +}); + +wx.getNetworkType((res) => { + if (res) { + res.networkType; + } +}); + +wx.hideMenuItems({ + menuList: [] +}); + +wx.hideAllNonBaseMenuItem(); + +wx.onMenuShareQQ({ + title: '', + link: '', + desc: '' +}); + +wx.openLocation({ + name: '', + latitude: 123.2, + longitude: -12.23 +}); + +wx.openProductSpecificView({ + productId: '1', + viewType: 0 +}); + +wx.chooseCard({ + cardId: '', + shopId: '', + cardType: '', + cardSign: '', + nonceStr: '', + timestamp: 1, + signType: '' +}); + +wx.onVoiceRecordEnd((res) => { + res.localId; +}); + +wx.onVoicePlayEnd((res) => { + res.localId; +}); + +wx.openProductSpecificView({ + productId: '' +});