HarmonyOS 鸿蒙Next 数组空安全

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 数组空安全

报错:Property ‘length’ does not exist on type ‘never’. <ArkTSCheck>

DevEco Studio NEXT Developer Beta1

Build #DS-233.14475.28.36.503403

Build Version: 5.0.3.403, built on June 20, 2024

Runtime version: 17.0.10+1-b1087.17 aarch64

VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

macOS 14.2.1

GC: G1 Young Generation, G1 Old Generation

Memory: 2048M

Cores: 10

Metal Rendering is ON

Registry:

  • idea.plugins.compatible.build=IC-233.14475.28

```javascript
export function ifNull() {
  let numbers: number[] | null = null;
  let length: number = numbers?.length ?? 0; // 报错
  console.log(`======&gt; ${length}`)
}
export function ifNull() {
  let numbers: number[] | null = null;
  if (numbers != null) {
    let length: number = numbers!.length; // 报错
    console.log(`======&gt; ${length}`)
  }
}

更多关于HarmonyOS 鸿蒙Next 数组空安全的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复
提了工单,以下是建议: 

```javascript
export function ifNull() {
  let numbers: number[] | null = null
  if (numbers != null) {
    let length: number = (numbers as Array<number>).length
    // todo
  }
}

更多关于HarmonyOS 鸿蒙Next 数组空安全的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


或者加个断言也行

let numbers: number[] | undefined = undefined as number[] | undefined;

编译器智能检查你报错上一行代码是null的,所以编译不过。你可以再封装一个方法绕过这个检查。

export function ifNull() {
  let numbers: number[] | null = null;
  let length: number = isNumber(numbers);  
  console.log(`======> ${length}`)
}

function isNumber(numbers: number[] | null) {
  return numbers?.length ?? 0
}

这。看起来也太委曲求全了,

在HarmonyOS鸿蒙Next中,数组空安全是通过类型系统和编译器检查来确保的。鸿蒙Next引入了空安全机制,防止在运行时出现空指针异常。对于数组,开发者需要明确声明数组是否可为空。例如,使用Array<T>表示非空数组,Array<T?>?表示可为空的数组或包含可为空元素的数组。编译器会强制检查这些声明,确保在操作数组时不会访问空元素或空数组,从而提升代码的健壮性。

在HarmonyOS的鸿蒙Next版本中,数组空安全处理主要通过以下几种方式实现:

  1. 空指针检查:在访问数组元素前,进行非空判断,避免NullPointerException。
  2. @NonNull@Nullable注解:使用这些注解明确标识数组是否可为空,增强代码的可读性和安全性。
  3. Kotlin集成:如果使用Kotlin开发,可以利用其内置的空安全特性,如?.操作符和!!断言。

通过这些方式,可以有效提升数组操作的安全性,减少运行时错误。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!