5***@qq.com
5***@qq.com
  • 发布:2025-08-20 17:06
  • 更新:2025-08-20 17:06
  • 阅读:11

【报Bug】uts插件定义参数方式不统一,android需要用type定义,harmony需要用interface定义

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows10

HBuilderX类型: 正式

HBuilderX版本号: 4.75

手机系统: Android

手机系统版本号: Android 11

手机厂商: 小米

手机机型: 与机型无关

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

使用描述中的代码就可以复现

预期结果:

在不同平台下可以统一用interface或type定义参数类型

实际结果:

在鸿蒙平台下需要用interface定义参数类型,在安卓平台下需要用type定义参数类型

bug描述:

uts插件定义参数类型不统一,android需要用type定义,harmony需要用interface定义,我的uts插件导出接口函数的输入参数格式为object类型,包括两个函数,格式如下,
VoidCB {
resolve: () => void;
reject: (err: string) => void;
}
但是在安卓和鸿蒙平台下需要用两种语法定义,定义代码如下:
// #ifdef APP-HARMONY
export interface VoidCB {
resolve: () => void;
reject: (err: string) => void;
}
// #endif
// #ifdef APP-ANDROID
export type VoidCB={
resolve():void;
reject(err:any):void;
}
// #endif

export type TestCB= (cb:VoidCB) => void

export const testCB:TestCB= function (cb:VoidCB):void {
console.log("[reject]",cb.reject);
console.log("[resolve]",cb.resolve);
}
报错情况:
1、在鸿蒙平台下如果用type定义参数,编译报错,不可以将object定义为type,只可以定义为interface
2、在安卓平台下,如果用interface定义参数,在正常的uni-app页面或js中调用组件会无法传参,例如如下的调用过程
import { VoidCB,testCB } from '@/uni_modules/sd-md';
function test(){
var cb:VoidCB ={
resolve:()=>{
console.log('resolve');
},
reject:(err)=>{
console.log('reject');
}
}
testCB(cb )
}

此时插件的testCB函数中无法接收到interface定义的函数,如果用type定义的是可以的,type定义的类型会被编译为Class并和UTSObject有解析,而interface却无法解析和匿名实现,他在kotlin本身语法里的匿名实现代码是object:VoidCB {}这样的写法,请官方大佬给帮忙看看。

2025-08-20 17:06 负责人:无 分享
已邀请:

要回复问题请先登录注册