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

- 发布:2025-08-20 17:06
- 更新:2025-08-20 17:06
- 阅读:11
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: windows10
HBuilderX类型: 正式
HBuilderX版本号: 4.75
手机系统: Android
手机系统版本号: Android 11
手机厂商: 小米
手机机型: 与机型无关
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
在不同平台下可以统一用interface或type定义参数类型
在不同平台下可以统一用interface或type定义参数类型
实际结果:
在鸿蒙平台下需要用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 {}这样的写法,请官方大佬给帮忙看看。
0 个回复