2***@qq.com
2***@qq.com
  • 发布:2025-06-30 14:13
  • 更新:2025-06-30 15:00
  • 阅读:35

文档真是够够的,研究都要找瞎也没看到哪儿有UTS插件导出接口名称的定义全是类型定义

分类:uni-app x

interface.uts 作为整个插件的入口声明 文档找了个遍也没看到怎么定义每个函数的名称 通篇都是类型 ,类型导出也是犯愁

插件申明文件中 export type和export type 对外都不可见,尝试用 export class (本不应该用class,这里没有具体实现)
结果 编译运行开始报错平台实现没找到导出的类型
然后在接口声明一个 接口 去平台目录实现 好家伙接口中要返回的类型必须 改成接口里面声明的接口 外面又看不到接口中导出的 interface
只能用typ 导出 t ype导出了 实现的时候需要一个class 去实现返回封装 好家伙类型又报错

interface.uts

export/open/public/   interface  IResult {  
        x:number  
        y:number;  
       close():void   
}  

  export interface IPlugins {      

    a():void   
    b():Promise<IResult>  

  }   

web/index.uts

class IResultWebImpl  implements IResult  {  
     //     
}  

PluginsWebImpl implements IPlugins  {  

  //...   
}

// page/index.uts;

import * as P from  '@/uni_modules/xx'  

P.b().then(r:P.IResult ) {  
        // .....  
}  

外部使用的始终是 接口定义的不关心实现 这种模式很难实现吗?

简化一下

interface.uts

export/open/public/   interface  IResult {  
        x:number  
        y:number;  
       close():void   
}  

//  export interface IPlugins {     省略掉  

 export  function a ():void   
  export  function b ():Promise<IResult>  

//  }   

或者使用 internal open public protected declare 等等标记 一下 应该不是多难得事情
面向接口而非实现 不是首要遵守的吗 为什么那么折腾

0 关注 分享

要回复文章请先登录注册

2***@qq.com

2***@qq.com (作者)

回复 蔡cai :
官方没有明确的规范定义 全靠猜 感觉全靠实现的人自己写成一样的
2025-06-30 15:00
蔡cai

蔡cai

回复 2***@qq.com :
你可以参考下这个插件https://ext.dcloud.net.cn/plugin?name=uni-registerRequestPermissionTips
2025-06-30 14:57
2***@qq.com

2***@qq.com (作者)

回复 蔡cai :
这里全是类型定义 没看到规范命名 按道理来说应该有一个 接口定义定义好插件的所有方法 每个平台分开实现 这样才能保证每个平台实现的名称一样 不然 import * as X from ‘xxx’ X.?? 这地方就没法写了
2025-06-30 14:53
蔡cai

蔡cai

https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html#%E7%BC%96%E5%86%99interface-uts这个嘛?
2025-06-30 14:33