OpenHarmony—ArkTS不支持生成器函数

规则:arkts-no-generators

级别错误

目前ArkTS不支持生成器函数,使用async或await机制进行并行任务处理。

TypeScript

function* counter(start: number, end: number) {
  for (let i = start; i <= end; i++) {
    yield i;
  }
}

for (let num of counter(1, 5)) {
  console.log(num);
}

ArkTS

async function complexNumberProcessing(str: string): Promise<string> {
  // ...
  return str;
}

async function foo() {
  for (let i = 1; i <= 5; i++) {
    console.log(await complexNumberProcessing(i));
  }
}

foo()

使用instanceof和as进行类型保护
规则:arkts-no-is

级别错误

ArkTS不支持is运算符,必须用instanceof运算符替代。在使用之前,必须使用as运算符将对象转换为需要的类型。

TypeScript

class Foo {
  foo: string = ''
  common: string = ''
}

class Bar {
  bar: string = ''
  common: string = ''
}

function isFoo(arg: any): arg is Foo {
  return arg.foo !== undefined;
}

function doStuff(arg: Foo | Bar) {
  if (isFoo(arg)) {
    console.log(arg.foo);  // OK
    console.log(arg.bar);  // 编译时错误
  } else {
    console.log(arg.foo);  // 编译时错误
    console.log(arg.bar);  // OK
  }
}

doStuff({ foo: 123, common: '123' });
doStuff({ bar: 123, common: '123' });

ArkTS

class Foo {
  foo: string = ''
  common: string = ''
}

class Bar {
  bar: string = ''
  common: string = ''
}

function isFoo(arg: Object): boolean {
  return arg instanceof Foo;
}

function doStuff(arg: Object): void {
  if (isFoo(arg)) {
    let fooArg = arg as Foo;
    console.log(fooArg.foo);   // OK
    console.log(arg.bar);    // 编译时错误
  } else {
    let barArg = arg as Bar;
    console.log(arg.foo);    // 编译时错误
    console.log(barArg.bar);   // OK
  }
}

function main(): void {
  doStuff(new Foo());
  doStuff(new Bar());
}

部分支持展开运算符
规则:arkts-no-spread

级别错误

ArkTS仅支持使用展开运算符展开数组、Array的子类和TypedArray(例如Int32Array)。仅支持使用在以下场景中:

  1. 传递给剩余参数时
  2. 复制一个数组到数组字面量

TypeScript

function foo(x: number, y: number, z: number) {
  // ...
}

let args: [number, number, number] = [0, 1, 2];
foo(...args);

ArkTS

function log_numbers(x: number, y: number, z: number) {
  // ...
}

let numbers: number[] = [1, 2, 3];
log_numbers(numbers[0], numbers[1], numbers[2]);

TypeScript

let point2d = { x: 1, y: 2 };
let point3d = { ...point2d, z: 3 };

ArkTS

class Point2D {
  x: number = 0; y: number = 0
}

class Point3D {
  x: number = 0; y: number = 0; z: number = 0
  constructor(p2d: Point2D, z: number) {
    this.x = p2d.x;
    this.y = p2d.y;
    this.z = z;
  }
}

let p3d = new Point3D({ x: 1, y: 2 } as Point2D, 3);

class DerivedFromArray extends Uint16Array {};

let arr1 = [1, 2, 3];
let arr2 = new Uint16Array([4, 5, 6]);
let arr3 = new DerivedFromArray([7, 8, 9]);
let arr4 = [...arr1, 10, ...arr2, 11, ...arr3];

那么要想成为一名鸿蒙高级开发,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术,需要我们共同去探索。

为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《OpenHarmony4.0&Next》的学习导图,从入门到进阶再到南北向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:《鸿蒙HarmonyOS分布式项目实战

在这里插入图片描述

除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1.应用开发导读(ArkTS)

2.……
在这里插入图片描述

二、HarmonyOS 概念

1.系统定义

2.技术架构

3.技术特性

4.系统安全

5…
在这里插入图片描述

三、如何快速入门?一小时快速认识HarmonyOS

1.基本概念

2.构建第一个ArkTS应用

3.构建第一个JS应用

4.……
在这里插入图片描述

四、开发基础知识

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.……
在这里插入图片描述

五、基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.……
在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙4.0源码开发架构分析pdf

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 04:12:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 04:12:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 04:12:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 04:12:01       20 阅读

热门阅读

  1. 1.基于C#的Dbf读写(文件结构概述)

    2024-01-30 04:12:01       32 阅读
  2. cpp-stub 打桩失败

    2024-01-30 04:12:01       40 阅读
  3. 题解:CF1922C(Closest Cities)

    2024-01-30 04:12:01       35 阅读
  4. 面试 CSS 框架八股文十问十答第一期

    2024-01-30 04:12:01       42 阅读
  5. C++算法学习心得七.贪心算法(2)

    2024-01-30 04:12:01       21 阅读
  6. Quartz在spring boot项目中重启后不能继续执行问题

    2024-01-30 04:12:01       32 阅读
  7. OpenSSH 9.6/9.6p1 (2023-12-18)的发布说明(中文译文)

    2024-01-30 04:12:01       41 阅读
  8. Apache孵化器领路人与导师的职责

    2024-01-30 04:12:01       46 阅读
  9. jQuery 和 Zepto 的区别? 各自的使用场景?

    2024-01-30 04:12:01       36 阅读