HarmonyOS 鸿蒙Next原生应用开发-从TS到ArkTS的适配规则(十三)

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

HarmonyOS 鸿蒙Next原生应用开发-从TS到ArkTS的适配规则(十三)

一、部分支持instanceof运算符

规则:arkts-instanceof-ref-types

级别:错误

在TypeScript中,instanceof运算符的左操作数的类型必须为any类型、对象类型,或者它是类型参数,否则结果为false。在ArkTS中,instanceof运算符的左操作数的类型必须为引用类型(例如,对象、数组或者函数),否则会发生编译时错误。此外,在ArkTS中,instanceof运算符的左操作数不能是类型,必须是对象的实例。

二、不支持in运算符

规则:arkts-no-in

级别:错误

由于在ArkTS中,对象布局在编译时是已知的并且在运行时无法修改,因此,不支持in运算符。如果仍需检查某些类成员是否存在,使用instanceof代替。

TypeScript

class Person {
name: string = ‘’
}
let p = new Person();

let b = ‘name’ in p; // true<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

ArkTS

class Person {
name: string = ‘’
}
let p = new Person();

let b = p instanceof Person; // true,且属性name一定存在<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

相关约束

对象的属性名必须是合法的标识符

不支持Symbol() API

不支持通过索引访问字段

不支持delete运算符

仅允许在表达式中使用typeof运算符

限制使用标准库

三、不支持解构赋值

规则:arkts-no-destruct-assignment

级别:错误

ArkTS不支持解构赋值。可使用其他替代方法,例如,使用临时变量。

TypeScript

let [one, two] = [1, 2]; // 此处需要分号
[one, two] = [two, one];

let head, tail [head, …tail] = [1, 2, 3, 4];<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

ArkTS

let arr: number[] = [1, 2];
let one = arr[0];
let two = arr[1];

let tmp = one; one = two; two = tmp;

let data: Number[] = [1, 2, 3, 4]; let head = data[0]; let tail: Number[] = []; for (let i = 1; i < data.length; ++i) { tail.push(data[i]); }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

本文根据HarmonyOS NEXT Developer Beta1官方公开的开发文档整理而成。

1 回复

HarmonyOS Next原生应用开发从TS到ArkTS的适配规则主要包括:

  1. 静态类型强化:ArkTS强制使用静态类型,减少动态类型的使用,提高代码稳定性和性能。
  2. 运算符限制:ArkTS限制了一些运算符的语义,如一元加法运算符仅用于数字,以简化语言规范和提升性能。
  3. 禁止运行时改变对象布局:ArkTS要求程序执行期间不能更改对象布局,以确保代码的一致性和执行效率。
  4. 特定语法不支持:如不支持in运算符、解构赋值、通过索引访问字段等,这些限制旨在提高代码的可读性和减少运行时错误。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部