HarmonyOS 鸿蒙Next TS适配ArkTS规则

HarmonyOS 鸿蒙Next TS适配ArkTS规则

一、使用具体的类型而非any或unknown

规则:arkts-no-any-unknown

级别:错误

ArkTS不支持any和unknown类型。显式指定具体类型。

TypeScript

let value1: any
value1 = true;
value1 = 42;

let value2: unknown value2 = true; value2 = 42;

ArkTS

let value_b: boolean = true; // 或者 let value_b = true
let value_n: number = 42; // 或者 let value_n = 42
let value_o1: Object = true;
let value_o2: Object = 42;

相关约束

强制进行严格类型检查

二、使用class而非具有call signature的类型

规则:arkts-no-call-signatures

级别:错误

ArkTS不支持对象类型中包含call signature。

TypeScript

type DescribableFunction = {
description: string
(someArg: string): string // call signature
}

function doSomething(fn: DescribableFunction): void { console.log(fn.description + ’ returned ’ + fn(’’)); }

ArkTS

class DescribableFunction {
description: string
public invoke(someArg: string): string {
return someArg;
}
constructor() {
this.description = ‘desc’;
}
}

function doSomething(fn: DescribableFunction): void { console.log(fn.description + ’ returned ’ + fn.invoke(’’)); }

doSomething(new DescribableFunction());

相关约束

使用class而非具有构造签名的类型

三、使用class而非具有构造签名的类型

规则:arkts-no-ctor-signatures-type

级别:错误

ArkTS不支持对象类型中的构造签名。改用类。

TypeScript

class SomeObject {}

type SomeConstructor = { new (s: string): SomeObject }

function fn(ctor: SomeConstructor) { return new ctor(‘hello’); }

ArkTS

class SomeObject {
public f: string
constructor (s: string) {
this.f = s;
}
}

function fn(s: string): SomeObject { return new SomeObject(s); }

相关约束

使用class而非具有call signature的类型

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


更多关于HarmonyOS 鸿蒙Next TS适配ArkTS规则的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next TS适配ArkTS规则的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提出的“HarmonyOS 鸿蒙Next原生应用开发-从TS到ArkTS的适配规则(五)”的问题,以下是根据HarmonyOS NEXT Developer Beta1官方开发文档整理的相关信息:

在HarmonyOS 鸿蒙Next原生应用开发中,从TypeScript (TS) 到ArkTS的适配规则涉及多个方面,以下是部分关键规则:

  1. instanceof运算符的使用限制:在ArkTS中,instanceof运算符的左操作数的类型必须为引用类型(例如,对象、数组或函数),否则会发生编译时错误。此外,左操作数不能是类型,必须是对象的实例。
  2. 不支持in运算符:由于ArkTS中对象布局在编译时是已知的并且在运行时无法修改,因此不支持in运算符。如果需要检查某些类成员是否存在,可以使用instanceof运算符代替。
  3. 对象的属性名约束:在ArkTS中,对象的属性名必须是合法的标识符,不能为数字或字符串(除了字符串字面量和枚举中的字符串值)。此外,不支持通过索引访问字段。
  4. 不支持Symbol() API:由于对象布局在编译时就确定了,且不能在运行时被更改,ArkTS不支持Symbol() API,只支持Symbol.iterator。
  5. 其他限制:在ArkTS中,不支持解构赋值,不支持delete运算符,仅允许在表达式中使用typeof运算符,并限制使用标准库。

以上是从TS到ArkTS适配的部分关键规则。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部