1e41f4b71Sopenharmony_ci# ArkCompiler子系统Changelog 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci## cl.ArkCompiler.1 ArkTS语法检查工具变更 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ciOpenHarmony SDK版本4.0.10.10/11相比4.0.10.8,ArkTS语法检查工具所涉及的规则有变更,以下规则涉及到的部分代码场景将报错。 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci> **说明: ** 8e41f4b71Sopenharmony_ci> 此变更仅为工具能力增强,使原先无法检查的语法规则可被工具检查覆盖,涉及的规则并非新增规则。 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci### 规则arkts-no-classes-as-obj 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci将导入的class作为变量使用,示例代码如下。 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci ```ts 15e41f4b71Sopenharmony_ci// module1.ets 16e41f4b71Sopenharmony_ciexport class C {} 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci// module2.ets 19e41f4b71Sopenharmony_ciimport { C } from './module1' 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_cilet c = C // error: arkts-no-class-as-obj 22e41f4b71Sopenharmony_ci ``` 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci**变更影响** 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci开发者需要适配代码,否则将导致编译失败。 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci**关键的接口/组件变更** 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ciArkTS语法检查工具变更。 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**适配指导** 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[适配指导案例](../../../application-dev/quick-start/arkts-more-cases.md#arkts-no-classes-as-obj)。 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci### 规则arkts-strict-typing 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci将`X | undefined`类型赋值给.ets中`X`类型的实体,示例代码如下。 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci ```ts 41e41f4b71Sopenharmony_ci// module.ets 42e41f4b71Sopenharmony_cifunction foo(a: number) { 43e41f4b71Sopenharmony_ci return a + 1 44e41f4b71Sopenharmony_ci} 45e41f4b71Sopenharmony_ci 46e41f4b71Sopenharmony_cifunction bar(x: number): number | undefined { 47e41f4b71Sopenharmony_ci return x > 0 ? x : undefined 48e41f4b71Sopenharmony_ci} 49e41f4b71Sopenharmony_ci 50e41f4b71Sopenharmony_cifoo(bar(-123)) // error: arkts-strict-typing 51e41f4b71Sopenharmony_ci ``` 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci将`X | null`类型赋值给.ets中`X`类型的实体,示例代码如下。 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci ```ts 56e41f4b71Sopenharmony_ci// module.ets 57e41f4b71Sopenharmony_cifunction foo(a: number) { 58e41f4b71Sopenharmony_ci return a + 1 59e41f4b71Sopenharmony_ci} 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_cifunction bar(x: number): number | null { 62e41f4b71Sopenharmony_ci return x > 0 ? x : null 63e41f4b71Sopenharmony_ci} 64e41f4b71Sopenharmony_ci 65e41f4b71Sopenharmony_cifoo(bar(-123)) // error: arkts-strict-typing 66e41f4b71Sopenharmony_ci ``` 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci**变更影响** 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci开发者需要适配代码,否则将导致编译失败。 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci**关键的接口/组件变更** 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ciArkTS语法检查工具变更。 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci**适配指导** 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[适配指导案例](../../../application-dev/quick-start/arkts-more-cases.md#arkts-strict-typingstrictmodeerror)。 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci### 规则arkts-no-ts-deps 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci在ts文件中`import`ets文件中的实体,示例代码如下。 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci ```ts 86e41f4b71Sopenharmony_ci// lib.ts 87e41f4b71Sopenharmony_ciexport class C {} 88e41f4b71Sopenharmony_ci 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci// module.ets 91e41f4b71Sopenharmony_ciimport { C } from './lib' 92e41f4b71Sopenharmony_ci ``` 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci**变更影响** 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_ci开发者需要适配代码,否则将导致编译失败。 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci**关键的接口/组件变更** 99e41f4b71Sopenharmony_ci 100e41f4b71Sopenharmony_ciArkTS语法检查工具变更。 101e41f4b71Sopenharmony_ci 102e41f4b71Sopenharmony_ci**适配指导** 103e41f4b71Sopenharmony_ci 104e41f4b71Sopenharmony_ci不符合ArkTS语法的文件需要进行适配修改,报错规则的具体说明和修改方式请参考[适配指导案例](../../../application-dev/quick-start/arkts-more-cases.md#arkts-no-tsdeps)。 105e41f4b71Sopenharmony_ci 106e41f4b71Sopenharmony_ci## cl.ArkCompiler.2 ArkTS语法规则变更 107e41f4b71Sopenharmony_ci 108e41f4b71Sopenharmony_ci增加ArkTS语法规则等级,分为两个级别:错误(error)、警告(warning)。 109e41f4b71Sopenharmony_ci 110e41f4b71Sopenharmony_ci- **错误**: 必须要遵从的约束。如果不遵从该约束,将会导致程序编译失败。 111e41f4b71Sopenharmony_ci- **警告**: 推荐遵从的约束。尽管现在违反该约束不会影响编译流程,但是在将来,违反该约束可能将会导致程序编译失败。 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci从4.0.10.11起,规则`arkts-no-definite-assignment`和`arkts-no-decorators-except-arkui`等级降为警告,不再阻塞工程编译,代码中使用`ESObject`会产生警告。 114e41f4b71Sopenharmony_ci 115e41f4b71Sopenharmony_ci同时,ArkTS语法支持以下特性: 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci`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`. 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_ci**变更影响** 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci开发者无需适配代码,无兼容性影响。 122