OpenHarmony—ArkTS不支持生成器函數

2024年2月6日 21点热度 0人点赞

規則: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…

三、如何快速入門?鴻蒙4.0源碼開發架構分析pdf

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.……

更多了解更多鴻蒙開發的相關知識可以參考:一小時快速認識HarmonyOS