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

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

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

一、不支持this类型

规则:arkts-no-typing-with-this

级别:错误

ArkTS不支持this类型,改用显式具体类型。

TypeScript

interface ListItem {
getHead(): this
}

class C { n: number = 0

m(c: this) { // … } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

ArkTS

interface ListItem {
getHead(): ListItem
}

class C { n: number = 0

m(c: C) { // … } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

二、不支持条件类型

规则:arkts-no-conditional-types

级别:错误

ArkTS不支持条件类型别名,引入带显式约束的新类型,或使用Object重写逻辑。

不支持infer关键字。

TypeScript

type X<T> = T extends number ? T: never
type Y<T> = T extends Array<infer Item> ? Item: never<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

ArkTS

// 在类型别名中提供显式约束
type X1<T extends number> = T

// 用Object重写,类型控制较少,需要更多的类型检查以确保安全 type X2<T> = Object

// Item必须作为泛型参数使用,并能正确实例化 .type YI<Item, T extends Array<Item>> = Item<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

三、不支持在constructor中声明字段

规则:arkts-no-ctor-prop-decls

级别:错误

ArkTS不支持在constructor中声明类字段。在class中声明这些字段。

TypeScript

class Person {
constructor(
protected ssn: string,
private firstName: string,
private lastName: string
) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}

getFullName(): string { return this.firstName + ’ ’ + this.lastName; } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

ArkTS

class Person {
protected ssn: string
private firstName: string
private lastName: string

constructor(ssn: string, firstName: string, lastName: string) { this.ssn = ssn; this.firstName = firstName; this.lastName = lastName; }

getFullName(): string { return this.firstName + ’ ’ + this.lastName; } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

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

1 回复

作为IT专家,对于HarmonyOS 鸿蒙Next原生应用开发从TS到ArkTS的适配规则有着深入了解。以下是对该适配规则(七)的专业解读:

ArkTS在适配过程中,相较于TypeScript(TS),存在若干重要的差异和规则。首先,ArkTS不支持this类型,这意味着开发者在ArkTS中不能使用this来隐式地引用类的实例。相反,应使用显式具体类型。例如,在接口或类中定义方法时,返回类型不应再使用this,而应替换为具体的类名或接口名。

其次,ArkTS不支持条件类型。这要求开发者在定义类型时,不能使用条件类型别名,而应引入带显式约束的新类型,或使用Object重写逻辑。同时,ArkTS不支持infer关键字。

再者,ArkTS不允许在构造函数中声明字段。在ArkTS中,类的字段应在类体中直接声明,而非在构造函数中。

这些规则确保了ArkTS具有更强的类型安全和静态检查能力,有助于减少运行时错误,提高程序的稳定性和性能。然而,这也意味着开发者在迁移TS代码至ArkTS时,需要对代码进行相应的修改和重构。

如果开发者在适配过程中遇到具体问题,建议查阅HarmonyOS NEXT的官方开发文档或相关资源。若问题依旧无法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部