Property ‘Icon‘ has no initializer and is not definitely assigned in the constructor. <ArkTSCheck>

个人在定义组件的一个属性时,遇到的问题

@Component
struct StateItem {
  Icon: Resource;
  name:string=''
  @BuilderParam content: () => void
  build() {
    
  }
}

在鸿蒙arkts语言中,该句意思为代码中,有一个名为Icon的属性在类的构造函数中没有被明确初始化这是TypeScript(arkts被鸿蒙称为是ts的超类)的严格空检查(strictNullChecks)特性的一部分,它要求所有可能为null或undefined的变量在使用前都必须被明确赋值。

通过了解,目前知道这类问题有几种解决方式:

1. 直接初始化Icon

最直接的方法是在定义的时候给Icon属性赋值,但是这里不好定义,因为是Resource类型,如果是string,number等倒是更好定义

2. 使用可选属性

如果Icon在某些情况下可能不被使用,你可以将其声明为可选属性。

@Component
struct StateItem {
 
  Icon?: Resource;
  name:string=''
  @BuilderParam content: () => void
  build() {
    
  }
}

3. 使用非空断言操作符!

如果你确定在类的其他部分(如方法调用之前)Icon会被赋值,但TypeScript的静态分析器无法推断出来,你可以在属性名后使用!来告诉TypeScript编译器这个属性在使用前一定会被赋值:

@Component
struct StateItem {
  //非空断言操作符,属性名后使用!来告诉TypeScript编译器这个属性在使用前一定会被赋值
  Icon!: Resource;
  name:string=''
  @BuilderParam content: () => void
  build() {
    
  }
}

4. 延迟初始化

这里不了解,不做评论,有需要可自行搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值