• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArkCompiler变更说明
2
3## cl.ArkCompiler.1 ArkTS语法检查变更
4
5为了推进ArkTS语法规则落地,在编译流程中添加ArkTS语法检查,对工程中的文件进行检查。并根据compatibleSdkVersion划分不同模式,根据模式判断是报warning还是error,以及是否阻塞编译。compatibleSdkVersion一般配置在build-profile.json5文件中。
6
7具体规则可参考[从TypeScript到ArkTS的适配规则](../../../application-dev/quick-start/typescript-to-arkts-migration-guide.md)。
8
9  - compatibleSdkVersion < 10 为兼容模式。在该模式下,对于违法ArkTS语法规则的代码,编译时报warning,不阻塞编译。
10  - compatibleSdkVersion >= 10 为标准模式。在该模式下,对于违法ArkTS语法规则的代码,编译时报error,并阻塞编译。
11
12**变更影响**
13
14变更之前没有做ArkTS语法的检查,变更后对应用代码增加了ArkTS语法的检查,并根据工程的compatibleSdkVersion判断是报warning还是error,以及是否阻塞编译。
15
16  - OpenHarmony SDK从4.0.10.3版本起,会开启编译告警。应用的工程进行编译时会对不符合ArkTS语法规则的代码给出warning告警,各模块可以根据告警信息进行适配,但并不阻塞编译。
17  - OpenHarmony SDK在API version 10 Release时预计将以error告警来提示ArkTS语法不规则的代码,此时工程将无法编译。
18
19**关键的接口/组件变更**
20
21在编译流程中添加了ArkTS语法的检查。
22
23**适配指导**
24
25不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[从TypeScript到ArkTS的适配规则](../../../application-dev/quick-start/typescript-to-arkts-migration-guide.md)。
26
27若需要了解ArkTS语言请参考[ArkTS语言简介](../../../application-dev/quick-start/introduction-to-arkts.md)。
28
29## cl.ArkCompiler.2 ArkTS语法检查工具变更
30
31OpenHarmony SDK版本4.0.10.10/11相比4.0.10.8,ArkTS语法检查工具所涉及的规则有变更,以下规则涉及到的部分代码场景将报错。
32
33> **说明: **
34> 此变更仅为工具能力增强,使原先无法检查的语法规则可被工具检查覆盖,涉及的规则并非新增规则。
35
36### 规则arkts-no-classes-as-obj
37
38将导入的class作为变量使用,示例代码如下。
39
40 ```ts
41// module1.ets
42export class C {}
43
44// module2.ets
45import { C } from './module1'
46
47let c = C  // error: arkts-no-class-as-obj
48 ```
49
50**变更影响**
51
52开发者需要适配代码,否则将导致编译失败。
53
54**关键的接口/组件变更**
55
56ArkTS语法检查工具变更。
57
58**适配指导**
59
60不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[适配指导案例](../../../application-dev/quick-start/arkts-more-cases.md#arkts-no-classes-as-obj)。
61
62### 规则arkts-strict-typing
63
64将`X | undefined`类型赋值给.ets中`X`类型的实体,示例代码如下。
65
66 ```ts
67// module.ets
68function foo(a: number) {
69  return a + 1
70}
71
72function bar(x: number): number | undefined {
73  return x > 0 ? x : undefined
74}
75
76foo(bar(-123))  // error: arkts-strict-typing
77 ```
78
79将`X | null`类型赋值给.ets中`X`类型的实体,示例代码如下。
80
81 ```ts
82// module.ets
83function foo(a: number) {
84  return a + 1
85}
86
87function bar(x: number): number | null {
88  return x > 0 ? x : null
89}
90
91foo(bar(-123))  // error: arkts-strict-typing
92 ```
93
94**变更影响**
95
96开发者需要适配代码,否则将导致编译失败。
97
98**关键的接口/组件变更**
99
100ArkTS语法检查工具变更。
101
102**适配指导**
103
104不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[适配指导案例](../../../application-dev/quick-start/arkts-more-cases.md#arkts-strict-typingstrictmodeerror)。
105
106### 规则arkts-no-ts-deps
107
108在ts文件中`import`ets文件中的实体,示例代码如下。
109
110
111 ```ts
112// lib.ts
113export class C {}
114
115
116// module.ets
117import { C } from './lib'
118 ```
119
120**变更影响**
121
122开发者需要适配代码,否则将导致编译失败。
123
124**关键的接口/组件变更**
125
126ArkTS语法检查工具变更。
127
128**适配指导**
129
130不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[适配指导案例](../../../application-dev/quick-start/arkts-more-cases.md#arkts-no-tsdeps)。
131
132## cl.ArkCompiler.3 ArkTS语法规则变更
133
134增加ArkTS语法规则等级,分为两个级别:错误(error)、警告(warning)。
135
136- **错误**: 必须要遵从的约束。如果不遵从该约束,将会导致程序编译失败。
137- **警告**: 推荐遵从的约束。尽管现在违反该约束不会影响编译流程,但是在将来,违反该约束可能将会导致程序编译失败。
138
139从4.0.10.11起,规则`arkts-no-definite-assignment`和`arkts-no-decorators-except-arkui`等级降为警告,不再阻塞工程编译,代码中使用`ESObject`会产生警告。
140
141同时,ArkTS语法支持以下特性:
142
143`tuple`、`keyof`、`for-of`、在数组场景下使用展开符、重导出、模块名以`.js`为后缀、`readonly`、`Encode`、`Decode`、`ParesHexOctet`、`Array.isArray`、`Object.entries`、`Object.keys`、`Object.values`、`Object.hasOwn`、`Object.hasOwnPropertyNames`、`Reflect.get`、`Reflect.set`、`Reflect.has`、`Reflect.ownKeys`、`Reflect.set`、`Symbol.iterator`、Utility类型中的`Required`和`Readonly`.
144
145**变更影响**
146
147开发者无需适配代码,无兼容性影响。
148