vue3 + uniapp + HBuilder 项目搭建 - 扩展uniapp内置Api

本文介绍了如何在Vue3和UniApp项目中扩展uni-app的内置API,包括安装uni-api的类型定义,配置tsconfig以识别namespace UniApp,创建配置文件uni.config.ts和声明文件uni.config.d.ts,并在页面中使用自定义的API。
摘要由CSDN通过智能技术生成

安装uni-api的types

npm i @dcloudio/types -D

配置tsconfig识别namespace UniApp

// tsconfig.json
{
   
	"compilerOptions": {
   
		"types": ["node", "@dcloudio/types"],
    	"typeRoots": ["./node_modules/@types/","./node_modules/@dcloudio/types/", "./types"],
	}
}

创建配置文件 uni.config.ts 和声明文件 uni.config.d.ts

// types/config/uni.config.d.ts
declare namespace UniApp {
   
  /**
   * @desc: 权限类型
   */
  type AuthorizeScopeTypes =
    | 'scope.userInfo' //用户信息 uni.getUserInfo
    | 'scope.userLocation' //地理位置 uni.getLocation, uni.chooseLocation
    | 'scope.userLocationBackground' //后台定位 wx.userLocationBackground
    | 'scope.address' //通信地址 uni.chooseAddress
    | 'scope.record' //录音功能 uni.getRecorderManager
    | 'scope.writePhotosAlbum' //保存到相册 uni.saveImageToPhotosAlbum, uni.saveVideoToPhotosAlbum
    | 'scope.camera' //摄像头 <camera /> 组件,头条下的扫码、拍照、选择相册
    | 'scope.invoice' //获取发票 wx.chooseInvoice
    | 'scope.invoiceTitle' //发票抬头 uni.chooseInvoiceTitle
    | 'scope.werun' //微信运动步数 wx.getWeRunData

  /**
   * @name: sww
   * @date: 2021-12-10
   * @desc: 路由类型
   */
  type LinkToTypes = 'navigateTo' | 'redirectTo' | 'switchTab' | 'reLaunch'

  /**
   * @name: sww
   * @date: 2021-12-10
   * @desc: 路由跳转参数
   */
  type LinkToOptions = {
   
    /**
     * 窗口显示的动画类型
     * - auto: 自动选择动画效果
     * - none: 无动画效果
     * - slide-in-right: 从右侧横向滑动效果
     * - slide-in-left: 左侧横向滑动效果
     * - slide-in-top: 从上侧竖向滑动效果
     * - slide-in-bottom: 从下侧竖向滑动效果
     * - fade-in: 从透明到不透明逐渐显示效果
     * - zoom-out: 从小到大逐渐放大显示效果
     * - zoom-fade-out: 从小到大逐渐放大并且从透明到不透明逐渐显示效果
     * - pop-in: 从右侧平移入栈动画效果
     */
    animationType?:
      | 'auto'
      | 'none'
      | 'slide-in-right'
      | 'slide-in-left'
      | 'slide-in-top'
      | 'slide-in-bottom'
      | 'fade-in'
      | 'zoom-out'
      | 'zoom-fade-out'
      | 'pop-in'
    /**
     * 窗口显示动画的持续时间,单位为 ms
     */
    animationDuration?: number
    /**
     * 页面间通信接口,用于监听被打开页面发送到当前页面的数据
     */
    events?: any
    /**
     * 跳转类型
     */
    type?: LinkToTypes
  }

  /**
   * @name: sww
   * @date: 2021-12-10
   * @desc: EventChannel类型定义
   */
  interface EventChannel {
   
    onFunction(...args: any[]): void
    emit(eventName: string, ...args: any[])
    off(eventName: string, fn: Function)
    on(eventName: string, fn: UniApp.EventChannel.onFunction)
    once(eventName: string, fn: UniApp.EventChannel.onFunction)
  }

  interface ShowToastTypedFn {
   
    success(title: string, options?: UniApp.ShowToastOptions): void
    error(title: string, options?: UniApp.ShowToastOptions): void
    loading(title: string, options?: UniApp.ShowToastOptions): void
  }

  interface ChooseImageOptions {
   
    size?: number //单位 M
  }

  interface ChooseImageSuccessCallbackResult {
   
    /**
     * 图片的本地文件路径列表
     */
    tempFilePaths: string[]
    /**
     * 图片的本地文件列表,每一项是一个 File 对象
     */
    tempFiles: ChooseImageSuccessCallbackResultFile[] | File[]
  }

  interface UniSelf extends UniApp.Uni {
   
    // 重新编辑返回值类型(uniapp自带的有对api promise化,但是types返回的都是void,这里重新定义类型声明)
    /**
     * 从本地相册选择图片或使用相机拍照
     *
     * 文档: [http://uniapp.dcloud.io/api/media/image?id=chooseimage](http://uniapp.dcloud.io/api/media/image?id=chooseimage)
     */
    chooseImage(
      options: UniApp.ChooseImageOptions
    ): Promise<UniApp.ChooseImageSuccessCallbackResult>

    // 自定义模块
    p: {
   
      /**
       * @name: sww
       * @date: 2021-12-09
       * @desc: loading
       */
      showLoading(options?: string | UniApp.ShowLoadingOptions): void
      /**
       * 提前向用户发起授权请求
       *
       * 文档: [http://uniapp.dcloud.io/api/other/authorize?id=authorize](http://uniapp.dcloud.io/api/other/authorize?id=authorize)
       */
      authorize(scope: AuthorizeScopeTypes): Promise<string>
      /**
       * 获取用户收货地址。调起用户编辑收货地址原生界面,并在编辑完成后返回用户选择的地址,需要用户授权 scope.address
       *
       * 文档: [http://uniapp.dcloud.io/api/other/choose-address?id=chooseaddress](http://uniapp.dcloud.io/api/other/choose-address?id=chooseaddress)
       */
      chooseAddress(): Promise
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值