admin管理员组

文章数量:1530842

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

@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. 延迟初始化

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

本文标签: initializerIconPropertyArkTSCheckconstructor