HarmonyOS Object literal must correspond to some explicitly declared class or interface \(arkts-no-untyped-obj-literals\)?

// 创建新实例并使用给定对象初始化
let storage = new LocalStorage({ 'PropA': 47 });

@Entry(storage) // 使LocalStorage可从@Component组件访问---注入实例
@Component
struct LocalStoragePage {
  // @LocalStorageLink变量装饰器声明新变量storLink1与LocalStorage中的'PropA'属性建立双向绑定
  @LocalStorageLink('PropA') storLink1: number = 1;

  build() {

    Column() {
      Text('-------LocalStorage-------').fontColor(Color.Red).fontSize(24)
      Text(`storLink1: ${this.storLink1}`).fontSize(20).fontWeight(600)
        .onClick(() => {
          this.storLink1++;
        })
      Button('修改')
        .onClick(() => {
          storage.set('PropA', 100)
        })
      ComA()
    }
    .width('100%').padding(20).justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)

  }
}

@Component
struct ComA {
  build() {
    Column() {
      Text(`ComA`)
      ComB()
    }.justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)
  }
}

@Component
struct ComB {
  @LocalStorageLink('PropA') storLink2: number = 1; //双向
  @LocalStorageProp('PropA') storLink3: number = 1; //单向

  build() {
    Column() {
      Text(`ComB_link: ${this.storLink2}`)
        .onClick(() => {
          this.storLink2 += 10
        })
      Text(`ComB_prop: ${this.storLink3}`)
        .onClick(() => {
          this.storLink3 += 10
        })
    }
  }
}

怎么改

阅读 408
1 个回答

方案一:

官网有适配案例,以及规则说明可以参考一下。

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-more-cases-V5\#arkts-no-untyped-obj-literals

方案二:

//需要写一个calss(如CameraLifecycleImpl)实现CameraLifecycle ;
let obj:CameraLifecycleImpl = new CameraLifecycleImpl();
//将obj作为入参传入
CameraService.getInstance().addLifecycleListener(obj)

目前代码检查对.ets做了强制语法约束,这种可以提高应用运行效率;推荐使用.ets,.ts暂不做强制约束

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏