規則: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)。僅支持使用在以下場景中:
- 傳遞給剩餘參數時
- 復制一個數組到數組字面量
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分佈式項目實戰》
![](https://news.xinpengboligang.com/upload/keji/b8ce2f0b4095501c0f1605b47f356ea5.jpeg)
除了上面整理的思維導圖以外,這裡還特別整理的一份《鴻蒙 (Harmony OS)開發學習手冊》給大傢進行參考學習:
一、入門必看
1.應用開發導讀(ArkTS)
2.……
![](https://news.xinpengboligang.com/upload/keji/0fea5eb924b01b056b879dc815f413f8.jpeg)
二、HarmonyOS 概念
1.系統定義
2.技術架構
3.技術特性
4.系統安全
5…
![](https://news.xinpengboligang.com/upload/keji/d450c7b5b729088b35b28bb465a24ecc.jpeg)
三、如何快速入門?《鴻蒙4.0源碼開發架構分析pdf》
1.基本概念
2.構建第一個ArkTS應用
3.構建第一個JS應用
4.……
![](https://news.xinpengboligang.com/upload/keji/f6816f53e8b01255c7ce59bc88392eff.jpeg)
四、開發基礎知識
1.應用基礎知識
2.配置文件
3.應用數據管理
4.應用安全管理
5.應用隱私保護
6.三方應用調用管控機制
7.資源分類與訪問
8.學習ArkTS語言
9.……
![](https://news.xinpengboligang.com/upload/keji/fea8844b45ce04c65ebbddb82326d10f.jpeg)
五、基於ArkTS 開發
1.Ability開發
2.UI開發
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網絡與鏈接
8.電話服務
9.數據管理
10.後臺任務(Background Task)管理
11.設備管理
12.設備使用信息統計
13.DFX
14.國際化開發
15.折疊屏系列
16.……
![](https://news.xinpengboligang.com/upload/keji/b6a7521dd7a0e434321fbec447fa06c1.jpeg)
更多了解更多鴻蒙開發的相關知識可以參考:《一小時快速認識HarmonyOS》