arkts中这样注册回调函数报错怎么解决?

arkts中这样注册回调函数报错怎么解决?

arkts文件中声明了一个接口:

export interface Callback{
    a():void;
    b(num:number):void;
}

代码逻辑中实现一个注册回调接口的函数:

registerCalblack(callback:Callback){

}

通过下面代码调用注册接口函数:

registerCallbck({
    a:()=>{
    },
    b:(num:number)=>{
    }
});

编译时报错:arkts-no-untyped-obj-literals,但是Callback放在ts文件中定义就没有问题,什么原因呢?

阅读 1.1k
2 个回答

这种类似匿名内部类的方式Android上很常见,ts中也可以,但是arkts对这种情况进行了约束:

需要显式标注对象字面量的类型
规则:arkts-no-untyped-obj-literals

在ArkTS中,需要显式标注对象字面量的类型,否则,将发生编译时错误。在某些场景下,编译器可以根据上下文推断出字面量的类型。

在以下上下文中不支持使用字面量初始化类和接口:

  • 初始化具有any、Object或object类型的任何对象
  • 初始化带有方法的类或接口
  • 初始化包含自定义含参数的构造函数的类
  • 初始化带readonly字段的类
registerCallbck({
    a:() {
    },
    b:(num:number) {
    }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进