OpenHarmony—ArkTS限制throw語句中表達式的類型

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

規則:arkts-limited-throw

級別:錯誤

ArkTS隻支持拋出Error類或其派生類的實例。禁止拋出其他類型(例如numberstring)的數據。

TypeScript

throw 4;
throw '';
throw new Error();

ArkTS

throw new Error();

限制省略函數返回類型標註

規則:
arkts-no-implicit-return-types

級別:錯誤

ArkTS在部分場景中支持對函數返回類型進行推斷。當return語句中的表達式是對某個函數或方法進行調用,且該函數或方法的返回類型沒有被顯著標註時,會出現編譯時錯誤。在這種情況下,請標註函數返回類型。

TypeScript

// 隻有在開啟noImplicitAny選項時會產生編譯時錯誤
function f(x: number) {
  if (x <= 0) {
    return x;
  }
  return g(x);
}
// 隻有在開啟noImplicitAny選項時會產生編譯時錯誤
function g(x: number) {
  return f(x - 1);
}
function doOperation(x: number, y: number) {
  return x   y;
}
f(10);
doOperation(2, 3);

ArkTS

// 需標註返回類型:
function f(x: number): number {
  if (x <= 0) {
    return x;
  }
  return g(x);
}
// 可以省略返回類型,返回類型可以從f的類型標註推導得到
function g(x: number): number {
  return f(x - 1);
}
// 可以省略返回類型
function doOperation(x: number, y: number) {
  return x   y;
}
f(10);
doOperation(2, 3);

不支持參數解構的函數聲明

規則:arkts-no-destruct-params

級別:錯誤

ArkTS要求實參必須直接傳遞給函數,且必須指定到形參。

TypeScript

function drawText({ text = '', location: [x, y] = [0, 0], bold = false }) {
  text;
  x;
  y;
  bold;
}
drawText({ text: 'Hello, world!', location: [100, 50], bold: true });

ArkTS

function drawText(text: String, location: number[], bold: boolean) {
  let x = location[0];
  let y = location[1];
  text;
  x;
  y;
  bold;
}
function main() {
  drawText('Hello, world!', [100, 50], true);
}

不支持在函數內聲明函數

規則:arkts-no-nested-funcs

級別:錯誤

ArkTS不支持在函數內聲明函數,改用lambda函數。

TypeScript

function addNum(a: number, b: number): void {
  // 函數內聲明函數
  function logToConsole(message: string): void {
    console.log(message);
  }
  let result = a   b;
  // 調用函數
  logToConsole('result is '   result);
}

ArkTS

function addNum(a: number, b: number): void {
  // 使用lambda函數代替聲明函數
  let logToConsole: (message: string) => void = (message: string): void => {
    console.log(message);
  }
  let result = a   b;
  logToConsole('result is '   result);
}

不支持在函數和類的靜態方法中使用this

規則:arkts-no-standalone-this

級別:錯誤

ArkTS不支持在函數和類的靜態方法中使用this,隻能在類的實例方法中使用this

TypeScript

function foo(i: string) {
  this.count = i; // 隻有在開啟noImplicitThis選項時會產生編譯時錯誤
}
class A {
  count: string = 'a'
  m = foo
}
let a = new A();
console.log(a.count); // 打印a
a.m('b');
console.log(a.count); // 打印b

ArkTS

class A {
  count: string = 'a'
  m(i: string): void {
    this.count = i;
  }
}
function main(): void {
  let a = new A();
  console.log(a.count);  // 打印a
  a.m('b');
  console.log(a.count);  // 打印b
}

相關約束

不支持Function.apply、Function.bind以及Function.call

那麼要想成為一名鴻蒙高級開發,以上知識點是必須要掌握的,除此之外,還需要掌握一些鴻蒙應用開發相關的一些技術,需要我們共同去探索。

為了節省大傢一些查找的時間,這邊聯合幾位行業大佬,為大傢準備了一份《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分佈式項目實戰