HarmonyOS 鸿蒙Next 数组空安全
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(`======> ${length}`)
}
export function ifNull() {
let numbers: number[] | null = null;
if (numbers != null) {
let length: number = numbers!.length; // 报错
console.log(`======> ${length}`)
}
}
更多关于HarmonyOS 鸿蒙Next 数组空安全的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
提了工单,以下是建议:
```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?>?
表示可为空的数组或包含可为空元素的数组。编译器会强制检查这些声明,确保在操作数组时不会访问空元素或空数组,从而提升代码的健壮性。