@esengine/pathfinding
Version:
寻路算法库,支持A*、广度优先等算法,适用于Cocos Creator、Laya等游戏引擎
1,985 lines (1,853 loc) • 130 kB
TypeScript
/**
* IOS及安卓不支持:
* globalCompositeOperation不支持以下值:source-in source-out destination-atop lighter copy
* isPointInPath 不支持
*/
declare class WxRenderingContext extends CanvasRenderingContext2D {
}
/**
* IOS及安卓不支持:
* pixelStorei 当第一个参数是 gl.UNPACK_COLORSPACE_CONVERSION_WEBGL 时不支持
* compressedTexImage2D不支持
* compressedTexSubImage2D不支持
* 安卓不支持:
* getExtension
* getSupportedExtensions
*/
declare class WxWebGLRenderingContext extends WebGLRenderingContext {
/**
* 将一个Canvas对应的Texture绑定到WebGL上下文。(目前该方法仅支持 iOS 6.6.6 以上版本,Android/开发者工具暂不支持。)
* 示例:gl.wxBindCanvasTexture(gl.TEXTURE_2D, canvas)
* @param texture WebGL的纹理类型枚举值
* @param canvas 需要绑定为Texture的Canvas
*/
wxBindCanvasTexture(texture: number, canvas: Canvas): void;
}
declare class WxPerformance {
/**
* 时间戳
*/
now(): number;
}
declare class Canvas {
/**
* 画布的宽度
*/
width: number;
/**
* 画布的高度
*/
height: number;
/**
* 将当前 Canvas 保存为一个临时文件,并生成相应的临时文件路径。
*/
toTempFilePath(p: wx.types.ToTempFileParams): void;
/**
* toTempFilePath 的同步版本
*/
toTempFilePathSync(p: wx.types.ToTempFileSyncParams): string;
/**
* 获取画布对象的绘图上下文
* @param contextType 上下文类型
* @param contextAttributes webgl 上下文属性,仅当 contextType 为 webgl 时有效
*/
getContext(contextType: "2d" | "webgl", contextAttributes?: wx.types.RenderingContextConfig): WxRenderingContext | WxWebGLRenderingContext;
/**
* 把画布上的绘制内容以一个 data URI 的格式返回
*/
toDataURL(): string;
}
declare class Stats {
/**
* 文件的类型和存取的权限,对应 POSIX stat.st_mode
*/
mode: string;
/**
* 文件大小,单位:B,对应 POSIX stat.st_size
*/
size: number;
/**
* 文件最近一次被存取或被执行的时间,UNIX 时间戳,对应 POSIX stat.st_atime
*/
lastAccessedTime: number;
/**
* 文件最后一次被修改的时间,UNIX 时间戳,对应 POSIX stat.st_mtime
*/
lastModifiedTime: number;
/**
* 判断当前文件是否一个目录
*/
isDirectory(): boolean;
/**
* 判断当前文件是否一个普通文件
*/
isFile(): boolean;
}
/**
* 日志管理类,最多保存5M的日志内容,超过5M后,旧的日志内容会被删除。
* 对于小程序,用户可以通过使用 button 组件的 open-type="feedback" 来上传打印的日志。
* 对于小游戏,用户可以通过使用 wx.createFeedbackButton 来创建上传打印的日志的按钮。
* 开发者可以通过小程序管理后台左侧菜单“反馈管理”页面查看相关打印日志。
* 基础库默认会把 App、Page 的生命周期函数和 wx 命名空间下的函数调用写入日志。
*/
declare class LogManager {
/**
* 写debug日志
* @param args 要记录的日志内容
*/
debug(... args: any[]): void;
/**
* 写info日志
* @param args 要记录的日志内容
*/
info(... args: any[]): void;
/**
* 写log日志
* @param args 要记录的日志内容
*/
log(... args: any[]): void;
/**
* 写warn日志
* @param args 要记录的日志内容
*/
warn(... args: any[]): void;
}
declare class FileSystemManager {
/**
* 重命名文件,可以把文件从 oldPath 移动到 newPath
*/
rename(param: wx.types.RenameParams): void;
/**
* FileSystemManager.rename 的同步版本
* @param oldPath 源文件路径,可以是普通文件或目录
* @param newPath 新文件路径
* @throws 指定源文件或目标文件没有写权限
* @throws 源文件不存在,或目标文件路径的上层目录不存在
*/
renameSync(oldPath: string, newPath: string): void;
/**
* 删除目录
*/
rmdir(param: wx.types.RmdirParams): void;
/**
* rmdir 的同步版本
* @param dirPath 要删除的目录路径
* @param recursive 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。
* @throws 目录不存在, 目录不为空, 指定的 dirPath 路径没有写权限
*/
rmdirSync(dirPath: string, recursive?: boolean): void;
/**
* 读取目录内文件列表
*/
readdir(param: wx.types.ReaddirParams): void;
/**
* readdir的同步版本
* @param dirPath 要读取的目录路径
* @throws 目录不存在
* @throws dirPath 不是目录
* @throws 指定的 filePath 路径没有读权限
*/
readdirSync(dirPath: string): ReadonlyArray<string>;
/**
* 创建目录
*/
mkdir(param: wx.types.MkdirParams): void;
/**
* mkdir 的同步版本
* @param dirPath 创建的目录路径
* @param recursive 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。
* @throws 上级目录不存在
* @throws 指定的 filePath 路径没有写权限
* @throws 有同名文件或目录
*/
mkdirSync(dirPath: string, recursive?: boolean): void;
/**
* 解链文件
*/
unlink(param: wx.types.UnlinkParams): void;
/**
* unlink 的同步版本
* @param filePath 要解链的文件路径
* @throws 指定的 path 路径没有读权限
* @throws 文件不存在
* @throws 传入的 filePath 是一个目录
*/
unlinkSync(filePath: string): void;
/**
* 解压文件
*/
unzip(param: wx.types.UnzipParams): void;
/**
* 读取本地文件内容
*/
readFile(param: wx.types.ReadfileParams): void;
/**
* readFile 的同步版本,读取并返回指定路径的文件的原始二进制内容
* @param filePath 要读取的文件的路径
* @throws 指定的 filePath 所在目录不存在
* @throws 指定的 filePath 路径没有读权限
*/
readFileSync(filePath: string): ArrayBuffer;
/**
* readFile 的同步版本,读取并按指定字符编码返回字符串
* @param filePath 要读取的文件的路径
* @param encoding 指定读取文件的字符编码
* @throws 指定的 filePath 所在目录不存在
* @throws 指定的 filePath 路径没有读权限
*/
readFileSync(filePath: string, encoding: wx.types.FileContentEncoding): string;
/**
* 获取文件 Stats 对象
*/
stat(param: wx.types.StatParams): void;
/**
* stat 的同步版本
* @param path 文件/目录路径
* @throws 指定的 path 路径没有读权限
* @throws 文件不存在
*/
statSync(path: string): Stats;
/**
* 写文件
*/
writeFile(param: wx.types.WritefileParams): void;
/**
* writeFile 的同步版本,写入二进制原始文件数据
* @param filePath 要写入的文件路径
* @param data 要写入的二进制数据
* @throws 指定的 filePath 所在目录不存在
* @throws 指定的 filePath 路径没有写权限
*/
writeFileSync(filePath: string, data: ArrayBuffer): void;
/**
* writeFile 的同步版本,写入文本字符串数据至文件
* @param filePath 要写入的文件路径
* @param data 要写入的文本内容
* @param encoding 指定写入的文本的字符编码格式
* @throws 指定的 filePath 所在目录不存在
* @throws 指定的 filePath 路径没有写权限
*/
writeFileSync(filePath: string, data: string, encoding: wx.types.FileContentEncoding): void;
/**
* 判断文件/目录是否存在
*/
access(param: wx.types.AccessfileParams): void;
/**
* access的同步版本
* @param path 要判断是否存在的文件/目录路径
* @throws 文件/目录不存在
*/
accessSync(path: string): void;
/**
* 复制文件
*/
copyFile(param: wx.types.CopyfileParams): void;
/**
* copyFile 的同步版本
* @param srcPath 源文件路径,只可以是普通文件
* @param destPath 目标文件路径
* @throws 指定目标文件路径没有写权限
* @throws 源文件不存在,或目标文件路径的上层目录不存在
*/
copyFileSync(srcPath: string, destPath: string): void;
/**
* 获取该小程序下已保存的本地缓存文件列表
* @param res.fileList.filePath 本地路径
* @param res.fileList.size 本地文件大小,以字节为单位
* @param res.fileList.createTime 文件创建时间
*/
getSavedFileList(param: wx.types.CallbacksWithType<wx.types.SavedfileList>): void;
/**
* 获取该小程序下的 本地临时文件 或 本地缓存文件 信息
*/
getFileInfo(param: wx.types.FileinfoParams): void;
/**
* 删除该小程序下已保存的本地缓存文件(新版本应使用unlink)
*/
removeSavedFile(param: wx.types.RemovefileParams): void;
/**
* 保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。
*/
saveFile(param: wx.types.SavefileParams): void;
/**
* saveFile的同步版本
* @param tempFilePath 临时存储文件路径
* @param filePath 要存储的文件路径
* @throws 指定的 tempFilePath 找不到文件
* @throws 指定的 filePath 路径没有写权限
* @throws 上级目录不存在
*/
saveFileSync(tempFilePath: string, filePath?: string): string;
/**
* 在文件结尾追加内容
*/
appendFile(param: wx.types.AppendfileParams): void;
/**
* appendFile的同步版本
* @param filePath 要追加内容的文件路径
* @param data 要追加的文本或二进制数据
* @param encoding 指定写入文件的字符编码
* @throws 指定的 filePath 文件不存在
* @throws 指定的 filePath 是一个已经存在的目录
* @throws 指定的 filePath 路径没有写权限
* @throws 指定的 filePath 是一个已经存在的目录
*/
appendFileSync(filePath: string, data: string | ArrayBuffer, encoding: wx.types.FileContentEncoding): void;
}
declare class DownloadTask {
/**
* 中断下载任务
*/
abort(): void;
/**
* 监听下载进度变化事件
* @param res.progress 下载进度百分比,值为0至100
* @param res.totalBytesWritten 已经下载的数据长度,单位 Bytes
* @param res.totalBytesExpectedToWrite 预期需要下载的数据总长度,单位 Bytes
*/
onProgressUpdate(callback: (res: { progress: number, totalBytesWritten: number, totalBytesExpectedToWrite: number }) => void): void;
}
declare class RequestTask {
/**
* 中断请求任务
*/
abort(): void;
}
declare class SocketTask {
/**
* 通过WebSocket发送数据
*/
send(param: wx.types.SocketSendParams): void;
/**
* 关闭WebSocket连接
*/
close(param: wx.types.SocketCloseParams): void;
/**
* 监听WebSocket 连接打开事件
*/
onOpen(callback: wx.types.SocketOpenCallback): void;
/**
* 监听WebSocket 连接关闭事件
*/
onClose(callback: () => void): void;
/**
* 监听WebSocket 错误事件
*/
onError(callback: wx.types.SocketErrorCallback): void;
/**
* 监听WebSocket 接受到服务器的消息事件
*/
onMessage(callback: wx.types.SocketMessageCallback): void;
}
/**
* 一个 UDP Socket 实例,默认使用 IPv4 协议。
* 错误码:
* -1 系统错误
* -2 socket接口错误
* -3 发送失败,无接口权限
* 1 发送失败,参数错误,address不合法
* 2 发送失败,参数错误,port不合法
*/
declare class UDPSocket {
/**
* 绑定一个系统随机分配的可用端口,或绑定一个指定的端口号
* @param port 需要绑定的端口号,不指定时使用随机端口
* @returns 绑定成功的端口号
*/
bind(port?: number): number;
/**
* 向指定的 IP 和 port 发送消息
*/
send(param: wx.types.UDPSendParams): void;
/**
* 关闭 UDP Socket 实例,相当于销毁。 在关闭之后,UDP Socket 实例不能再发送消息,每次调用 UDPSocket.send 将会触发错误事件,
* 并且 message 事件回调函数也不会再执行。在 UDPSocket 实例被创建后将被 Native 强引用,保证其不被 GC。在 UDPSocket.close 后
* 将解除对其的强引用,让 UDPSocket 实例遵从 GC。
*/
close(): void;
/**
* 设置监听关闭事件回调
* @param callback 关闭事件的回调函数
*/
onClose(callback: () => void): void;
/**
* 清除监听关闭事件回调
* @param callback 之前监听的函数
*/
offClose(callback: () => void): void;
/**
* 监听错误事件
* @param callback 错误回调函数
*/
onError(callback: (res: {
/**
* 错误信息
*/
errMsg: string;
}) => void): void;
/**
* 取消监听错误事件
* @param callback 之前设置的错误回调函数
*/
offError(callback: (res: {
/**
* 错误信息
*/
errMsg: string;
}) => void): void;
/**
* 监听开始监听数据包消息的事件
* @param callback 回调函数
*/
onListening(callback: () => void): void;
/**
* 取消监听开始监听数据包消息的事件
* @param callback 之前设置的回调函数
*/
offListening(callback: () => void): void;
/**
* 监听收到消息的事件
* @param callback 回调函数
*/
onMessage(callback: (res: wx.types.UDPMessage) => void): void;
/**
* 取消监听收到消息的事件
* @param callback 之前设置的回调函数
*/
offMessage(callback: (res: wx.types.UDPMessage) => void): void;
}
declare class UploadTask {
/**
* 中断上传任务
*/
abort(): void;
/**
* 监听上传进度变化事件
* @param callback.res.progress 上传进度百分比
* @param callback.res.totalBytesSent 已经上传的数据长度,单位 Bytes
* @param callback.res.totalBytesExpectedToSend 预期需要上传的数据总长度,单位 Bytes
*/
onProgressUpdate(callback: (res: { progress: number, totalBytesSent: number, totalBytesExpectedToSend: number }) => void): void;
}
declare class KVData {
key: string;
value: string;
}
declare class UserGameData {
/**
* 用户的微信头像 url
*/
avatarUrl: string;
/**
* 用户的微信昵称
*/
nickname: string;
/**
* 用户的openid
*/
openid: string;
/**
* 用户的托管 KV 数据列表
*/
KVDataList: ReadonlyArray<KVData>;
}
declare class CreatedButton {
type: wx.types.ButtonType;
text: string;
image: string;
style: wx.types.ButtonStyle;
show(): void;
hide(): void;
onTap(callback: (res?: any) => void): void; // res参数会被具体按钮的API定义覆盖为具体信息
offTap(callback: (res?: any) => void): void;
destroy(): void;
}
declare class UserInfoButton extends CreatedButton {
onTap(callback: (res: {
/**
* 用户信息对象,不包含 openid 等敏感信息
*/
userInfo: wx.types.UserInfo,
/**
* 不包括敏感信息的原始数据字符串,用于计算签名
*/
rawData: string,
/**
* 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,参考文档signature(https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/http-signature.html?t=201822)
*/
signature: string,
/**
* 包括敏感数据在内的完整用户信息的加密数据,详见加密数据解密算法(https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/signature.html?t=201822)
*/
encryptedData: string,
/**
* 加密算法的初始向量,详见加密数据解密算法(https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/signature.html?t=201822)
*/
iv: string,
errMsg: string
}) => void): void;
}
declare class OpenSettingButton extends CreatedButton {
onTap(callback: () => void): void;
offTap(callback: () => void): void;
}
declare class GameClubButton extends CreatedButton {
icon: wx.types.GameClubButtonIcon;
onTap(callback: (res: {
errMsg: string;
}) => void): void;
}
declare class FeedbackButton extends CreatedButton {
onTap(callback: (res: {
errMsg: string;
}) => void): void;
}
declare class OpenDataContext {
/**
* 开放数据域和主域共享的 sharedCanvas,注意在开放数据域内时getContext只能使用2d模式
*/
canvas: Canvas;
/**
* 向开放数据域发送消息
* @param message 要发送的消息,message 中及嵌套对象中 key 的 value 只能是 primitive value。即 number、string、boolean、null、undefined。
*/
postMessage(message: any): void;
}
declare class LoadSubpackageTask {
/**
* 监听分包加载进度变化事件
* @param callback.res.progress 分包下载进度百分比
* @param callback.res.totalBytesWritten 已经下载的数据长度,单位 Bytes
* @param callback.res.totalBytesExpectedToWrite 预期需要下载的数据总长度,单位 Bytes
*/
onProgressUpdate(callback: (res: { progress: number, totalBytesWritten: number, totalBytesExpectedToWrite: number }) => void): void;
}
declare class UpdateManager {
/**
* 应用更新包并重启
*/
applyUpdate(): void;
/**
* 监听检查更新结果回调
*/
onCheckForUpdate(callback: () => void): void;
/**
* 监听更新包下载成功回调
*/
onUpdateReady(callback: () => void): void;
/**
* 监听更新包下载失败回调
*/
onUpdateFailed(callback: () => void): void;
}
declare class WxWorker {
/**
* 向主线程或Worker线程发送的消息。
* @param message 需要发送的消息,必须是一个可序列化的 JavaScript 对象。
*/
postMessage(message: any): void;
/**
* 结束当前 worker 线程,仅限在主线程 worker 对象上调用。
*/
terminate(): void;
/**
* 监听接收主线程/Worker 线程向当前线程发送的消息
* @param callback.res.message 接收主线程/Worker 线程向当前线程发送的消息
*/
onMessage(callback: (res: { message: any }) => void): void;
}
/**
* InnerAudioContext 实例,可通过 wx.createInnerAudioContext 接口获取实例。
*/
declare class InnerAudioContext {
/**
* 音频资源的地址
*/
src: string;
/**
* 是否自动播放
*/
autoplay: boolean;
/**
* 是否循环播放
*/
loop: boolean;
/**
* 是否遵循系统静音开关,当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音
*/
obeyMuteSwitch: boolean;
/**
* 当前音频的长度,单位 s。只有在当前有合法的 src 时返回
*/
readonly duration: number;
/**
* 当前音频的播放位置,单位 s。只有在当前有合法的 src 时返回,时间不取整,保留小数点后 6 位
*/
readonly currentTime: number;
/**
* 当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放
*/
paused: boolean;
/**
* 音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲
*/
readonly buffered: number;
/**
* 音量。范围 0~1。
*/
volume: number;
/**
* 播放
*/
play(): void;
/**
* 暂停。暂停后的音频再播放会从暂停处开始播放
*/
pause(): void;
/**
* 停止。停止后的音频再播放会从头开始播放。
*/
stop(): void;
/**
* 跳转到指定位置,单位 s
* @param position 跳转的时间
*/
seek(position: number): void;
/**
* 销毁当前实例
*/
destroy(): void;
/**
* 监听音频进入可以播放状态的事件
*/
onCanplay(callback: () => void): void;
/**
* 取消监听音频进入可以播放状态的事件
*/
offCanplay(callback: () => void): void;
/**
* 监听音频播放事件
*/
onPlay(callback: () => void): void;
/**
* 取消监听音频播放事件
*/
offPlay(callback: () => void): void;
/**
* 监听音频暂停事件
*/
onPause(callback: () => void): void;
/**
* 取消监听音频暂停事件
*/
offPause(callback: () => void): void;
/**
* 监听音频停止事件
*/
onStop(callback: () => void): void;
/**
* 取消监听音频停止事件
*/
offStop(callback: () => void): void;
/**
* 监听音频自然播放至结束的事件
*/
onEnded(callback: () => void): void;
/**
* 取消监听音频自然播放至结束的事件
*/
offEnded(callback: () => void): void;
/**
* 监听音频播放进度更新事件
*/
onTimeUpdate(callback: () => void): void;
/**
* 取消监听音频播放进度更新事件
*/
offTimeUpdate(callback: () => void): void;
/**
* 监听音频播放错误事件
*/
onError(callback: () => void): void;
/**
* 取消监听音频播放错误事件
*/
offError(callback: () => void): void;
/**
* 监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
*/
onWaiting(callback: () => void): void;
/**
* 取消监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
*/
offWaiting(callback: () => void): void;
/**
* 监听音频进行跳转操作的事件
*/
onSeeking(callback: () => void): void;
/**
* 取消监听音频进行跳转操作的事件
*/
offSeeking(callback: () => void): void;
/**
* 监听音频完成跳转操作的事件
*/
onSeeked(callback: () => void): void;
/**
* 取消监听音频完成跳转操作的事件
*/
offSeeked(callback: () => void): void;
}
declare class RecorderManager {
/**
* 开始录音
*/
start(param: {
/**
* 录音的时长,单位 ms,最大值 600000(10 分钟),默认值60000(1 分钟)
*/
duration?: number,
/**
* 采样率
*/
sampleRate: 8000 | 11025 | 12000 | 16000 | 22050 | 24000 | 32000 | 44100 | 48000,
/**
* 录音通道数
*/
numberOfChannels: 1 | 2,
/**
* 编码码率
*/
encodeBitRate: number,
/**
* 音频格式
*/
format: "mp3" | "aac",
/**
* 指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调
*/
frameSize: number,
/**
* 指定录音的音频源,可通过 wx.getAvailableAudioSources() 获取当前可用的音频源,默认值auto
*/
audioSource?: wx.types.AudioSourceType
}): void;
/**
* 暂停录音
*/
pause(): void;
/**
* 继续录音
*/
resume(): void;
/**
* 停止录音
*/
stop(): void;
/**
* 监听录音开始事件
*/
onStart(callback: () => void): void;
/**
* 监听录音继续事件
*/
onResume(callback: () => void): void;
/**
* 监听录音暂停事件
*/
onPause(callback: () => void): void;
/**
* 监听录音结束事件
* @param callback.res.tempFilePath 录音文件的临时路径
*/
onStop(callback: (res: { tempFilePath: string }) => void): void;
/**
* 监听已录制完指定帧大小的文件事件。如果设置了 frameSize,则会回调此事件。
* @param callback.res.frameBuffer 录音分片数据
* @param callback.res.isLastFrame 当前帧是否正常录音结束前的最后一帧
*/
onFrameRecorded(callback: (res: { frameBuffer: ArrayBuffer, isLastFrame: boolean }) => void): void;
/**
* 监听录音错误事件
*/
onError(callback: (res: { errMsg: string }) => void): void;
}
declare class ImageFile {
/**
* 本地文件路径
*/
path: string;
/**
* 本地文件大小,单位 B
*/
size: number;
}
declare class Video {
/**
* 视频的左上角横坐标
*/
x: number;
/**
* 视频的左上角纵坐标
*/
y: number;
/**
* 视频的宽度,默认值300
*/
width: number;
/**
* 默认值150
*/
height: number;
/**
* 视频的资源地址
*/
src: string;
/**
* 视频的封面
*/
poster: string;
/**
* 视频的初始播放位置,单位为 s 秒,默认值0
*/
initialTime: number;
/**
* 视频的播放速率,有效值有 0.5、0.8、1.0、1.25、1.5默认值1.0
*/
playbackRate: number;
/**
* 视频是否为直播,默认值0
*/
live?: number;
/**
* 视频的缩放模式
* fill - 填充,视频拉伸填满整个容器,不保证保持原有长宽比例
* contain - 包含,保持原有长宽比例。保证视频尺寸一定可以在容器里面放得下。因此,可能会有部分空白
* cover - 覆盖,保持原有长宽比例。保证视频尺寸一定大于容器尺寸,宽度和高度至少有一个和容器一致。因此,视频有部分会看不见
*/
objectFit: "contain" | "cover" | "fill";
/**
* 视频是否显示控件,默认true
*/
controls: boolean;
/**
* 视频是否自动播放,默认false
*/
autoplay: boolean;
/**
* 视频是否是否循环播放,默认值false
*/
loop: boolean;
/**
* 视频是否禁音播放,默认值false
*/
muted: boolean;
/**
* 视频开始缓冲时触发的回调函数
*/
onwaiting: () => void;
/**
* 视频开始播放时触发的回调函数
*/
onplay: () => void;
/**
* 视频暂停时触发的回调函数
*/
onpause: () => void;
/**
* 视频播放到末尾时触发的回调函数
*/
onended: () => void;
/**
* 每当视频播放进度更新时触发的回调函数
*/
ontimeupdate: () => void;
/**
* 视频发生错误时触发的回调函数
*/
onerror: () => void;
/**
* 销毁视频
*/
destroy(): void;
/**
* 监听视频缓冲事件
*/
onWaiting(callback: () => void): void;
/**
* 取消监听视频缓冲事件
*/
offWaiting(callback: () => void): void;
/**
* 监听视频播放事件
*/
onPlay(callback: () => void): void;
/**
* 取消监听视频播放事件
*/
offPlay(callback: () => void): void;
/**
* 监听视频暂停事件
*/
onPause(callback: () => void): void;
/**
* 取消监听视频暂停事件
*/
offPause(callback: () => void): void;
/**
* 监听视频播放到末尾事件
*/
onEnded(callback: () => void): void;
/**
* 取消监听视频播放到末尾事件
*/
offEnded(callback: () => void): void;
/**
* 监听视频播放进度更新事件
* @param callback.res.position 当前的播放位置,单位为秒
* @param callback.res.duration 视频的总时长,单位为秒
*/
onTimeUpdate(callback: (res: { position: number, duration: number }) => void): void;
/**
* 取消监听视频播放进度更新事件
*/
offTimeUpdate(callback: (res: { position: number, duration: number }) => void): void;
/**
* 监听视频错误事件
* @param callback.res.errMsg 错误信息,有如下值
* MEDIA_ERR_NETWORK - 当下载时发生错误
* MEDIA_ERR_DECODE - 当解码时发生错误
* MEDIA_ERR_SRC_NOT_SUPPORTED - video 的 src 属性是不支持的资源类型
*/
onError(callback: (res: { errMsg: string }) => void): void;
/**
* 取消监听视频错误事件
*/
offError(callback: (res: { errMsg: string }) => void): void;
/**
* 播放视频
*/
play(): Promise<void>;
/**
* 暂停视频
*/
pause(): Promise<void>;
/**
* 停止视频
*/
stop(): Promise<void>;
/**
* 视频跳转
* @param time 视频跳转到指定位置,单位为 s 秒
*/
seek(time: number): Promise<void>;
/**
* 视频全屏
*/
requestFullScreen(): Promise<void>;
/**
* 视频退出全屏
*/
exitFullScreen(): Promise<void>;
}
/**
* 相机对象
*/
declare class Camera {
/**
* 相机的左上角横坐标
*/
x: number;
/**
* 相机的左上角纵坐标
*/
y: number;
/**
* 相机的宽度
*/
width: number;
/**
* 相机的高度
*/
height: number;
/**
* 摄像头朝向
*/
devicePosition: "front" | "back";
/**
* 闪光灯状态
*/
flash: "auto" | "on" | "off";
/**
* 帧数据图像尺寸
*/
size: "small" | "medium" | "large";
/**
* 拍照,可指定质量,成功则返回图片
* @param quality 图片质量
*/
takePhoto(quality?: "high" | "normal" | "low"): Promise<{
/**
* 临时图片路径
*/
tempImagePath: string,
/**
* 图片宽度
*/
width: string,
/**
* 图片高度
*/
height: string
}>;
/**
* 开始录像
*/
startRecord(): Promise<void>;
/**
* 结束录像,成功则返回封面与视频
* @param compressed 是否压缩录制视频
*/
stopRecord(compressed: boolean): Promise<{
/**
* 临时视频路径
*/
tempThumbPath: string,
/**
* 临时封面路径
*/
tempVideoPath: string
}>;
/**
* 监听用户不允许授权使用摄像头的情况
* @param callback 回调函数
*/
onAuthCancel(callback: () => void): void;
/**
* 监听摄像头非正常终止事件,如退出后台等情况
* @param callback 回调函数
*/
onStop(callback: () => void): void;
/**
* 监听摄像头实时帧数据
*/
onCameraFrame(callback: (res: {
/**
* 图像数据矩形的宽度
*/
width: number,
/**
* 图像数据矩形的高度
*/
height: number,
/**
* 图像像素点数据,一维数组,每四项表示一个像素点的 rgba
*/
data: ArrayBuffer
}) => void): void;
/**
* 开启监听帧数据
*/
listenFrameChange(): void;
/**
* 关闭监听帧数据
*/
closeFrameChange(): void;
/**
* 销毁相机
*/
destroy(): void;
}
/**
* banner 广告组件。banner 广告组件是一个原生组件,层级比上屏 Canvas 高,会覆盖在上屏 Canvas 上。banner 广告组件默认是隐藏的,需要调用 BannerAd.show() 将其显示。banner 广告会根据开发者设置的宽度进行等比缩放,缩放后的尺寸将通过 BannerAd.onResize() 事件中提供。
*/
declare class BannerAd {
/**
* 广告单元 id
*/
adUnitId: string;
/**
* banner 广告组件的样式。style 上的属性的值仅为开发者设置的值,banner 广告会根据开发者设置的宽度进行等比缩放,缩放后的真实尺寸需要通过 BannerAd.onResize() 事件获得。
*/
style: wx.types.AdStyle;
/**
* 显示 banner 广告。
*/
show(): Promise<void>;
/**
* 隐藏 banner 广告
*/
hide(): void;
/**
* 销毁 banner 广告
*/
destroy(): void;
/**
* 监听 banner 广告缩放
*/
onResize(callback: (res: { width: number, height: number }) => void): void;
/**
* 取消监听隐藏 banner 广告缩放
*/
offResize(callback: (res: { width: number, height: number }) => void): void;
/**
* 监听banner 广告加载事件
*/
onLoad(callback: () => void): void;
/**
* 取消监听banner 广告加载事件
*/
offLoad(callback: () => void): void;
/**
* 监听banner 广告错误事件
*/
onError(callback: (res: { errMsg: string }) => void): void;
/**
* 取消监听banner 广告错误事件
*/
offError(callback: (res: { errMsg: string }) => void): void;
}
declare class InterstitialAd extends BannerAd {
/**
* 加载视频广告
*/
load(): Promise<void>;
/**
* 监听用户点击 关闭广告 按钮的事件
*/
onClose(callback: (res: { isEnded: boolean }) => void): void;
/**
* 监听用户点击 关闭广告 按钮的事件
*/
offClose(callback: (res: { isEnded: boolean }) => void): void;
}
declare class RewardedVideoAd extends InterstitialAd {
}
// --定时器
declare function clearTimeout(timeoutID: number): void;
declare function clearInterval(intervalID: number): void;
declare function setTimeout(fn: () => void, delay: number, ...rest: any[]): number;
declare function setInterval(fn: () => void, delay: number, ...rest: any[]): number;
// --渲染
declare function cancelAnimationFrame(requestID: number): void;
declare function requestAnimationFrame(callback: () => void): number;
declare namespace wx {
namespace types {
interface Callbacks {
success?: () => void;
fail?: () => void;
complete?: () => void;
}
interface CallbacksWithType<T> {
success?: (res: T) => void;
fail?: () => void;
complete?: () => void;
}
interface CallbacksWithType2<T, F> {
success?: (res: T) => void;
fail?: (res: F) => void;
complete?: () => void;
}
interface RenderingContextConfig {
/**
* 表示是否抗锯齿
*/
antialias?: boolean;
/**
* 表示是否绘图完成后是否保留绘图缓冲区
*/
preserveDrawingBuffer?: boolean;
/**
* 抗锯齿样本数。最小值为 2,最大不超过系统限制数量,仅 iOS 支持
*/
antialiasSamples?: number;
}
interface ToTempFileSyncParams {
/**
* 截取 canvas 的左上角横坐标
*/
x?: number;
/**
* 截取 canvas 的左上角纵坐标
*/
y?: number;
/**
* 截取 canvas 的宽度
*/
width?: number;
/**
* 截取 canvas 的高度
*/
height?: number;
/**
* 目标文件的宽度,会将截取的部分拉伸或压缩至该数值
*/
destWidth?: number;
/**
* 目标文件的高度,会将截取的部分拉伸或压缩至该数值
*/
destHeight?: number;
/**
* 目标文件的类型
*/
fileType?: "jpg" | "png";
/**
* jpg图片的质量,仅当 fileType 为 jpg 时有效。取值范围为 0.0(最低)- 1.0(最高),不含 0。不在范围内时当作 1.0
*/
quality?: number;
}
interface ToTempFileParams extends ToTempFileSyncParams {
success?: (res: { tempFilePath: string }) => void;
fail?: () => void;
complete?: () => void;
}
interface RenameParams {
oldPath: string;
newPath: string;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface RmdirParams {
dirPath: string;
recursive?: boolean;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface ReaddirParams {
dirPath: string;
success?: (res: { files: ReadonlyArray<string> }) => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface MkdirParams {
dirPath: string;
recursive?: boolean;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
type FileContentEncoding = "ascii" | "base64" | "binary" | "hex" | "ucs2" | "ucs-2" | "utf16le" | "utf-16le" | "utf-8" | "utf8" | "latin1";
interface ReadfileParams {
filePath: string;
encoding?: FileContentEncoding;
success?: (res: { data: string | ArrayBuffer }) => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface StatParams {
path: string;
success?: (res: { stat: Stats }) => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface WritefileParams {
filePath: string;
data: string | ArrayBuffer;
encoding?: FileContentEncoding;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface UnlinkParams {
filePath: string;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface UnzipParams {
zipFilePath: string;
targetPath: string;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface AccessfileParams {
path: string;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface SavedfileList {
fileList: {
filePath: string;
size: number;
createTime: number;
};
}
interface CopyfileParams {
srcPath: string;
destPath: string;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface FileinfoParams {
filePath: string;
success?: (res: { size: number, digest: string }) => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface RemovefileParams {
filePath: string;
success?: () => void;
fail?: () => void;
complete?: () => void;
}
interface SavefileParams {
tempFilePath: string;
filePath?: string;
success?: (res: { savedFilePath: string }) => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface AppendfileParams {
filePath: string;
data: string | ArrayBuffer;
encoding?: FileContentEncoding;
success?: () => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
interface LineHeightParams {
fontStyle?: "normal" | "italic";
fontWeight?: "normal" | "bold";
fontSize?: number;
fontFamily: string;
text: string;
success?: (res: { lineHeight: number }) => void;
fail?: () => void;
complete?: () => void;
}
interface Image {
src: string;
width: number;
height: number;
onload: () => void;
onerror: (e?: any) => void;
}
// --启动参数
interface LaunchOption {
/**
* 场景值
*/
scene: number;
/**
* 启动参数
*/
query: any;
/**
* 当前小游戏是否被显示在聊天顶部
*/
isSticky: boolean;
/**
* 票据
*/
shareTicket: string;
}
// --系统信息
interface SystemInfo {
/**
* 手机品牌
*/
brand: string;
/**
* 手机型号
*/
model: string;
/**
* 设备像素比
*/
pixelRatio: number;
/**
* 屏幕宽度
*/
screenWidth: number;
/**
* 屏幕高度
*/
screenHeight: number;
/**
* 可使用窗口宽度
*/
windowWidth: number;
/**
* 可使用窗口高度
*/
windowHeight: number;
/**
* 微信设置的语言
*/
language: string;
/**
* 微信版本号
*/
version: string;
/**
* 操作系统版本
*/
system: string;
/**
* 客户端平台
*/
platform: string;
/**
* 用户字体大小设置。以“我-设置-通用-字体大小”中的设置为准,单位 px。
*/
fontSizeSetting: string;
/**
* 客户端基础库版本
*/
SDKVersion: string;
/**
* 性能等级
*/
benchmarkLevel: number;
/**
* 电量,范围 1 - 100
*/
battery: number;
/**
* wifi 信号强度,范围 0 - 4
*/
wifiSignal: number;
}
// --触摸对象
interface Touch {
/**
* Touch 对象的唯一标识符,只读属性。一次触摸动作(我们值的是手指的触摸)在平面上移动的整个过程中, 该标识符不变。可以根据它来判断跟踪的是否是同一次触摸过程。
*/
identifier: number;
/**
* 触点相对于整体页面的 X 轴距离。
*/
pageX: number;
/**
* 触点相对于整体页面的 Y 轴距离。
*/
pageY: number;
/**
* 触点相对于游戏窗口的 X 轴距离。
*/
clientX: number;
/**
* 触点相对于游戏窗口的 Y 轴距离。
*/
clientY: number;
}
interface TouchData {
/**
* 当前事件的类型
*/
type: string;
/**
* 当前所有触摸点的列表
*/
touches: ReadonlyArray<Touch>;
/**
* 触发此次事件的触摸点列表
*/
changedTouches: ReadonlyArray<Touch>;
/**
* 事件触发时的时间戳
*/
timeStamp: number;
}
// --iBeacon(TODO)
/**
* 停止搜索附近的 iBeacon 设备
*/
function stopBeaconDiscovery(param: any): void;
/**
* 开始搜索附近的 iBeacon 设备
*/
function startBeaconDiscovery(param: any): void;
/**
* 监听 iBeacon 设备更新事件,仅能注册一个监听
*/
function onBeaconUpdate(callback: any): void;
/**
* 监听 iBeacon 服务状态变化事件,仅能注册一个监听
*/
function onBeaconServiceChange(callback: any): void;
/**
* 取消监听 iBeacon 设备更新事件
*/
function offBeaconUpdate(callback: any): void;
/**
* 取消监听 iBeacon 服务状态变化事件
*/
function offBeaconServiceChange(callback: any): void;
/**
* 获取所有已搜索到的 iBeacon 设备
*/
function getBeacons(param: any): void;
/*
IBeaconInfo
属性
string uuid
iBeacon 设备广播的 uuid
string major
iBeacon 设备的主 id
string minor
iBeacon 设备的次 id
number proximity
表示设备距离的枚举值
number accuracy
iBeacon 设备的距离
number rssi
表示设备的信号强度
*/
// --低功耗蓝牙(TODO)
function writeBLECharacteristicValue(): void;
function readBLECharacteristicValue(): void;
function onBLEConnectionStateChange(): void;
function onBLECharacteristicValueChange(): void;
function notifyBLECharacteristicValueChange(): void;
function getBLEDeviceServices(): void;
function getBLEDeviceCharacteristics(): void;
function createBLEConnection(): void;
function closeBLEConnection(): void;
// --蓝牙(TODO)
function stopBluetoothDevicesDiscovery(): void;
function startBluetoothDevicesDiscovery(): void;
function openBluetoothAdapter(): void;
function onBluetoothDeviceFound(): void;
function onBluetoothAdapterStateChange(): void;
function getConnectedBluetoothDevices(): void;
function getBluetoothDevices(): void;
function getBluetoothAdapterState(): void;
function closeBluetoothAdapter(): void;
// --电量
interface BatteryInfo {
/**
* 设备电量,范围 1 - 100
*/
level: string;
/**
* 是否正在充电
*/
isCharging: boolean;
}
// --剪切板
interface ClipboardData {
data: string;
}
interface SetClipboardDataParams {
success?: () => void;
fail?: () => void;
complete?: () => void;
data: string;
}
interface SetKeepScreenOnParams {
success?: () => void;
fail?: () => void;
complete?: () => void;
keepScreenOn: boolean;
}
interface SetScreenBrightnessParams {
success?: () => void;
fail?: () => void;
complete?: () => void;
/**
* 屏幕亮度值,范围 0 ~ 1,0 最暗,1 最亮
*/
value: number;
}
interface DownfileParams {
url: string;
/**
* 在指定filePath之后success回调中将不会有res.tempFilePath路径值,下载的文件会直接写入filePath指定的路径(有写入权限的情况下,根目录请使用wx.env.USER_DATA_PATH,路径文件夹必须存在,否则写入失败)
*/
filePath?: string;
/**
* HTTP 请求的 Header,Header 中不能设置 Referer
*/
header?: { [key: string]: string };
/**
* res.tempFilePath 临时文件路径。如果没传入 filePath 指定文件存储路径,则下载后的文件会存储到一个临时文件
* res.statusCode 开发者服务器返回的 HTTP 状态码
*/
success?: (res: { tempFilePath?: string, statusCode: number }) => void;
fail?: (res: { errMsg: string }) => void;
complete?: () => void;
}
type NetworkType = "wifi" | "2g" | "3g" | "4g" | "any" | "none";
type RequestMethod = "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "TRACE" | "CONNECT";
interface RequestParams {
/**
* 开发者服务器接口地址
*/
url: string;
/**
* 请求的参数
*/
data?: string | { [key: string]: any };
/**
* 设置请求的 header,header 中不能设置 Referer
*/
header?: { [name: string]: string };
/**
* HTTP 请求方法
*/
method?: RequestMethod;
/**
* 返回的数据格式
*/
dataType?: "json" | "arraybuffer";
/**
* res.data usually can be string or ArrayBuffer
*/
success?: (res: { data: any, statusCode: number, header?: { [key: string]: string } }) => void;
fail?: () => void;
complete?: () => void;
}
interface SocketSendParams {
data: string | ArrayBuffer;
success?: () => void;
fail?: () => void;
complete?: () => void;
}
interface SocketConnectParams {
url: string;
protocols?: string[];
header?: { [key: string]: string };
method?: RequestMethod;
success?: () => void;
fail?: () => void;
complete?: () => void;
}
interface SocketCloseParams {
/**
* 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭)
*/
code?: number;
/**
* 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符)
*/
reason?: string;
success?: () => void;
fail?: () => void;
complete?: () => void;
}
type SocketOpenCallback = (res: { header?: { [key: string]: string } }) => void;
type SocketMessageCallback = (res: { data: string | ArrayBuffer }) => void;
type SocketErrorCallback = (res: { errMsg: string }) => void;
interface UDPSendParams {
/**
* 要发消息的地址。可以是一个和本机同网段的 IP 地址,也可以是在安全域名列表内的域名地址
*/
address: string;
/**
* 要发送消息的端口号
*/
port: number;
/**
* 要发送的数据
*/
message: string | ArrayBuffer;
/**
* 发送数据的偏移量,仅当 message 为 ArrayBuffer 类型时有效,默认值0
*/
offset?: number;
/**
* 发送数据的长度,仅当 message 为 ArrayBuffer 类型时有效,默认值message.byteLength
*/
length?: number;
}
interface UDPMessage {
/**
* 收到的消息
*/
message: ArrayBuffer;
/**
* 消息来源的结构化信息
*/
remoteInfo: {
/**
* 发送消息的 socket 的地址
*/
address: string;
/**
* 使用的协议族,为 IPv4 或者 IPv6
*/
family: string;
/**
* 端口号
*/
port: number;
/**
* message 的大小,单位:字节
*/
size: number;
};
}
/**
* wx.getUserInfo的旧版本API参数,随时会被删除,不推荐使用
*/
interface OldUserInfoParam {
/**
* 是否带上登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。
*/
withCredentials?: boolean;
/**
* 显示用户信息的语言
*/
lang?: "en" | "zh_CN" | "zh_TW";
success?: (res: {
/**
* 用户信息对象,不包含 openid 等敏感信息
*/
userInfo: UserInfo,
/**
* 不包括敏感信息的原始数据字符串,用于计算签名
*/
rawData: string,
/**
* 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,参考文档signature(https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/http-signature.html?t=201822)
*/
signature: string,
/**
* 包括敏感数据在内的完整用户信息的加密数据,详见加密数据解密算法(https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/signature.html?t=201822)
*/
encryptedData: string,
/**
* 加密算法的初始向量,详见加密数据解密算法(https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/signature.html?t=201822)
*/
iv: string,
errMsg: string
}) => void;
fail?: () => void;
complete?: () => void;
}
/**
* 新版本wx.getUserInfo的参数,需要在开放数据域内调用
*/
interface NewUserInfoParam {
/**
* 要获取信息的用户的 openId 数组,如果要获取当前用户信息,则将数组中的一个元素设为 'selfOpenId'
*/
openIdList?: string[];
/**
* 显示用户信息的语言
*/
lang?: "en" | "zh_CN" | "zh_TW";
success?: (res: { data: ReadonlyArray<UserInfo> }) => void;
fail?: () => void;
complete?: () => void;
}
interface UserInfo {
language: string;
nickName: string;
avatarUrl: string;
/**
* 0:未知、1:男、2:女
*/
gender: 0 | 1 | 2;
country: string;
province: string;
city: string;
}
type ButtonType = "text" | "image";
interface ButtonStyle {
left?: number;
top?: number;
width?: number;
height?: number;
/**
* 格式#ff0000
*/
backgroundColor?: string;
/**
* 格式#ff0000
*/
borderColor?: string;
borderWidth?: number;
borderRadius?: number;
textAlign?: "left" | "center" | "right";
fontSize?: number;
lineHeight?: number;
}
type GameClubButtonIcon = "green" | "white" | "dark" | "light";
// --设置
interface AuthSetting {
/**
* 用户信息,对应接口 wx.getUserInfo
*/
"scope.userInfo"?: boolean;
/**
* 地理位置,对应接口 wx.getLocation wx.chooseLocation
*/
"scope.userLocation"?: boolean;
/**
* 通讯地址,对应接口 wx.chooseAddress
*/
"scope.address"?: boolean;
/**
* 发票抬头,对应接口 wx.chooseInvoiceTitle
*/
"scope.invoiceTitle"?: boolean;
/**
* 微信运动步数,对应接口 wx.getWeRunData
*/
"scope.werun"?: boolean;
/**
* 录音功能,对应接口 wx.startRecord
*/
"scope.record"?: boolean;
/**
* 保存到相册 wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum
*/
"scope.writePhotosAlbum"?: boolean;
/**
* 摄像头 wx.camera
*/
"scope.camera"?: boolean;
}
interface SetStorageParams {
key: string;
data: any;
success?: () => void;
fail?: () => void;
complete?: () => void;
}
interface RemoveStorageParams {
key: string;
success?: () => void;
fail?: () => void;
complete?: () => void;
}
interface GetStorageParams {
key: string;
success?: (res: { data: any }) => void;
fail?: () => void;
complete?: () => void;
}
interface StorageInfo {
/**
* 当前 storage 中所有的 key
*/
keys: ReadonlyArray<string>;
/**
* 当前占用的空间大小, 单位 KB
*/
currentSize: number;
/**
* 限制的空间大小,单位 KB
*/
limitSize: number;
}
interface ShareOption {
/**
* 转发标题,不传则默认使用当前小游戏的昵称。
*/
title?: string;
/**
* 转发显示图片的链接,可以是网络图片路径或本地图片文件路径或相对代码包根目录的图片文件路径。显示图片长宽比是 5:4
*/
imageUrl?: string;
/**
* 查询字符串,必须是 key1=val1&key2=val2 的格式。从这条转发消息进入后,可通过 wx.getLaunchOptionsSync() 或 wx.onShow 获取启动参数中的 query。
*/
query?: string;