diff --git a/zh-cn/application-dev/quick-start/arkts-v1.1-v1.2-interop-rules.md b/zh-cn/application-dev/quick-start/arkts-v1.1-v1.2-interop-rules.md index 9afb726fb1ece39c51668312c59de969a235a76e..9f588148bfe13ee337129b73f7cfeefc209a94b2 100644 --- a/zh-cn/application-dev/quick-start/arkts-v1.1-v1.2-interop-rules.md +++ b/zh-cn/application-dev/quick-start/arkts-v1.1-v1.2-interop-rules.md @@ -8,6 +8,8 @@ **级别:** error +ArkTS1.2导出ArkTS1.1实体时保持动静态边界清晰。 + **ArkTS1.1** ```typescript // file1.ets @@ -43,6 +45,8 @@ export { X, Y } from './file2'; // 编译报错 **级别:** error +ArkTS1.2不区分基本类型和装箱类型,js的boxed对象在互操作时会被拆箱成基本类型。 + **ArkTS1.1** ```typescript // file1.ets @@ -84,6 +88,8 @@ typeof c; // 'string' **级别:** error +ArkTS1.2的对象天然支持并发共享,不需要加@Sendable和@Concurrent注解。 + **ArkTS1.1** ```typescript // file1.ets @@ -109,6 +115,8 @@ function foo() {} **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + **ArkTS1.1** ```typescript // file1.ets @@ -172,6 +180,8 @@ foo(new X()); **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + **ArkTS1.1** ```typescript // file1.ets @@ -234,6 +244,8 @@ foo(new X()) **级别:** error +Object的接口参数类型为静态Object. ArkTS1.0对象在1.2中表现为ESValue的实例,不是Object的实例,参数类型不匹配。 + **ArkTS1.1** ```typescript // file1.ets @@ -275,6 +287,8 @@ foo(new X()); // 编译报错 **级别:** error +Reflect的接口参数类型为静态Object. ArkTS1.0对象在1.2中表现为ESValue的实例,不是Object的实例,参数类型不匹配。 + **ArkTS1.1** ```typescript // file1.ets ArkTS1.1 @@ -323,6 +337,8 @@ foo(new X()); // 编译报错 **级别:** error +ArkTS1.2没有动态import语法,使用ESValue接口动态导入动态模块。 + **ArkTS1.1** ```typescript // file1.ets @@ -354,6 +370,8 @@ let a = A.instantiate() as A; **级别:** error +ArkTS1.2的语法限制,ArkTS1.2创建ArkTS1.1的没有无参构造函数的类的对象字面量,需要使用new关键字和构造函数。 + **ArkTS1.1** ```typescript // file1.ets @@ -431,6 +449,8 @@ let x: X | Y = new X('hello'); // OK **级别:** error +ArkTS1.2创建ArkTS1.1的类的对象字面量时,不要使用instanceof判断字面量类型。 + **ArkTS1.1** ```typescript // file1.ets @@ -468,6 +488,10 @@ a instanceof A; // true **级别:** error +ArkTS1.2不区分基本类型和boxed类型,因此js的boxed对象在interop时会被unboxed成基本类型的值。 + +不要对boxed类型进行typeof判断 + **ArkTS1.1** ```typescript // file1.ets @@ -509,6 +533,8 @@ typeof c; // 'string' **级别:** error +ArkTS1.1的对象字面量是动态对象,不是真正的标注类型,所以ArkTS1.1中使用构造函数创建ArkTS1.2对象字面量。 + **ArkTS1.1** ```typescript // file1.ets @@ -566,6 +592,8 @@ bar(createY(456)) **级别:** error +ArkTS1.1传参或赋值给ArkTS1.2时,ArkTS1.2需要接收动态对象参数或字段的类型声明为ESObject。 + **ArkTS1.1** ```typescript // file1.ets @@ -618,6 +646,10 @@ a.data = y; // 运行时报错 **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + +ArkTS 1.1 Object内置方法作用在ArkTS1.2对象需要重新适配代码。 + **ArkTS1.1** ```typescript // file2.ets @@ -678,6 +710,10 @@ foo(new X()); **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + +ArkTS1.1 Reflect内置方法作用在ArkTS1.2对象需要重新适配代码。 + **ArkTS1.1** ```typescript // file2.ets @@ -738,6 +774,10 @@ foo(new X()) **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + +ArkTS1.2 Object内置方法作用在ArkTS1.1对象需要重新适配代码。 + **ArkTS1.1** ```typescript // file1.ets @@ -779,6 +819,10 @@ foo(new X()); // 运行时报错 **级别:** error +ArkTS1.1对象在1.2中表现为ESObject的实例,不是Object的实例,参数类型不匹配。 + +ArkTS1.2 Reflect内置方法作用在ArkTS1.1对象需要重新适配代码。 + **ArkTS1.1** ```typescript // file1.ets @@ -883,6 +927,8 @@ arr.find(a.compare, b) // 运行时报错 **级别:** error +装饰器会动态修改类或对象的布局,ArkTS1.2不支持装饰器特性。 + **ArkTS1.1** ```typescript // file1.ts @@ -903,6 +949,8 @@ NA; **规则:** arkts-interop-ts2s-static-access-ts-type +**级别:** error + TS独有类型包括如下类型: - any - unknown @@ -938,7 +986,7 @@ TS独有类型包括如下类型: - Capitalize - Uncapitalize -**级别:** error +ArkTS1.2中不支持这些类型,使用ESValue接口进行交互。 **ArkTS1.1** ```typescript @@ -972,6 +1020,10 @@ obj.setProperty('prop', ESValue.wrap(1)); **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + +ArkTS1.1Object内置方法作用在ArkTS1.2对象需要重新适配代码。 + **ArkTS1.1** ```typescript // file1.ts @@ -1013,6 +1065,10 @@ foo(ESValue.wrap(new X())) **级别:** error +ArkTS1.2对象在动态上下文中没有own property,表现为sealed,不能修改对象布局。 + +ArkTS1.1Reflect内置方法作用在ArkTS1.2对象需要重新适配代码。 + **ArkTS1.1** ```typescript // file1.ts @@ -1058,6 +1114,8 @@ foo(ESValue.wrap(new X())); **级别:** error +ArkTS1.2中throw和catch的对象只能是Error的实例。 + **ArkTS1.1** ```typescript // file1.ts @@ -1100,6 +1158,8 @@ try { **级别:** error +ArkTS1.2不区分基本类型和boxed类型,避免使用boxed类型,或者避免对boxed类型进行typeof + **ArkTS1.1** ```typescript // file1.ts @@ -1140,6 +1200,8 @@ typeof c; // 'string' **级别:** error +ArkTS1.2没有动态import语法,使用ESValue接口动态导入动态模块。 + **ArkTS1.1** ```typescript // file1.ts @@ -1169,6 +1231,8 @@ let a = A.instantiate() as A; **级别:** error +不要使用instanceof 判断字面量类型。 + **ArkTS1.1** ```typescript // file1.ts @@ -1206,6 +1270,8 @@ a instanceof A; // true **级别:** error +ArkTS1.2中import js文件时使用ESValue的接口导入模块和对象。 + **ArkTS1.1** ```typescript // file1.js @@ -1232,6 +1298,8 @@ let foo = mod.getProperty('foo'); **级别:** error +ArkTS1.2不能以`export {A} from "./file1"`的形式直接在ets文件中导出js对象。 + **ArkTS1.1** ```typescript // file1.js @@ -1268,6 +1336,8 @@ export { foo, A }; **级别:** error +ArkTS1.2中使用ESValue接口调用js函数和传参。 + **ArkTS1.1** ```typescript // file1.js @@ -1301,6 +1371,8 @@ bar.invoke(ESValue.wrap(123)); **级别:** error +ArkTS1.2使用ESValue接口实例化js对象。 + **ArkTS1.1** ```typescript // file1.js @@ -1332,6 +1404,8 @@ foo.instantiate(ESValue.wrap(123)); **级别:** error +ArkTS1.2使用ESValue接口访问js属性。 + **ArkTS1.1** ```typescript // file1.js @@ -1361,6 +1435,8 @@ foo.setProperty('name', ESValue.wrap("456")) **级别:** error +ArkTS1.2使用ESValue接口调用js方法和传参。 + **ArkTS1.1** ```typescript // file1.js @@ -1393,6 +1469,8 @@ foo.invokeMethod('bar', ESValue.wrap(123)); **级别:** error +ArkTS1.2使用ESValue接口访问索引,接口接收参数为ESValue类型,传参时需要用wrap接口构造ESValue实例再传参。 + **ArkTS1.1** ```typescript // file1.js @@ -1424,6 +1502,8 @@ arr.setProperty(3, ESValue.wrap(4)); **级别:** error +ArkTS1.2使用ESValue的接口转换js对象类型。 + **ArkTS1.1** ```typescript // file1.js @@ -1474,6 +1554,8 @@ let a4: bigint = big.toBigInt(); **级别:** error +ArkTS1.2使用ESValue的接口获取js对象类型。 + **ArkTS1.1** ```typescript // file1.js @@ -1504,6 +1586,8 @@ num.typeOf(); // 'number' **级别:** error +ArkTS1.2使用ESValue的接口判断js对象类型。 + **ArkTS1.1** ```typescript // file1.js @@ -1536,6 +1620,8 @@ foo.isInstanceOf(Foo); **级别:** error +ArkTS1.2对js对象自增自减时,使用ESValue的接口转换为数字后再操作。 + **ArkTS1.1** ```typescript // file1.js @@ -1583,6 +1669,8 @@ a = tmp; **级别:** error +ArkTS1.2对js对象进行一元运算时,使用ESValue的接口转换为数字后再操作。 + **ArkTS1.1** ```typescript // file1.js @@ -1621,6 +1709,8 @@ let num = foo.getProperty('num'); **级别:** error +ArkTS1.2对js对象进行二元运算时,使用ESValue的接口转换为数字后再操作。 + **ArkTS1.1** ```typescript // file1.js @@ -1663,6 +1753,8 @@ a ** b; **级别:** error +ArkTS1.2在await js中的Promise对象时,先使用ESValue的接口转换为Promise对象后再await。 + **ArkTS1.1** ```typescript // file1.js @@ -1698,6 +1790,8 @@ async function bar() { **级别:** error +ArkTS1.2对js数据进行比较时,使用ESValue的接口转换为数字后再操作。 + **ArkTS1.1** ```typescript // file1.js @@ -1738,6 +1832,8 @@ a <= b; **级别:** error +ArkTS1.2对js数据进行相等判断时,使用ESValue的接口判断。 + **ArkTS1.1** ```typescript // file1.js @@ -1778,6 +1874,8 @@ a.isStrictlyEqualTo(b); **级别:** error +ArkTS1.2对js对象进行条件判断时,使用ESValue的接口转换为boolean后再判断。 + **ArkTS1.1** ```typescript // file1.js @@ -1809,6 +1907,8 @@ if (isGood) {} **级别:** error +ArkTS1.2继承js的类时,使用ESValue的接口构造JS类并传递js父类。 + **ArkTS1.1** ```typescript // file1.js @@ -1843,6 +1943,8 @@ let b = B.instantiate(); **级别:** error +ArkTS1.2只能catch Error实例,针对非常规的js异常对象,交互是会被包装到ESError中,通过getValue()方法可以获取包装了原始异常对象的ESValue实例。 + **ArkTS1.1** ```typescript // file1.js @@ -1886,6 +1988,8 @@ try { **级别:** error +ArkTS1.2访问js的boxed对象时,避免使用boxed类型,或者避免对boxed类型进行typeof。 + **ArkTS1.1** ```typescript // file1.js @@ -1927,6 +2031,8 @@ foo.getProperty('str').typeOf(); // 'string' **级别:** error +ArkTS1.2遍历js对象时,使用ESValue接口访问索引和属性。 + **ArkTS1.1** ```typescript // file1.js @@ -1964,6 +2070,8 @@ for (let i = 0; i < len; ++i) { **级别:** error +js调用ArkTS1.2函数和传参时,确保传参匹配声明的类型。 + **ArkTS1.1** ```typescript // file1.js @@ -2015,6 +2123,8 @@ handle.invoke(ESValue.wrap(lambda)); **级别:** error +js 增删改ArkTS1.2对象属性时,避免动态修改对象布局,需要新增的属性提前在类型中声明,需要删除的属性使用undefined置空。 + **ArkTS1.1** ```typescript // file1.js @@ -2061,6 +2171,8 @@ foo.invoke(ESValue.wrap(new X())); **级别:** error +js Object内置方法作用在ArkTS1.2对象时,需重新适配代码。 + **ArkTS1.1** ```typescript // file1.js @@ -2103,6 +2215,8 @@ foo.invoke(ESValue.wrap(new X())) **级别:** error +js Reflect内置方法作用在ArkTS1.2对象时,需重新适配代码。 + **ArkTS1.1** ```typescript // file1.js @@ -2149,6 +2263,8 @@ foo.invoke(ESValue.wrap(new X())); **级别:** error +js 对ArkTS1.2对象进行展开语法时,需重新适配代码。 + **ArkTS1.1** ```typescript // file1.js @@ -2188,6 +2304,8 @@ foo.invoke(ESValue.wrap(new X())) **级别:** error +ArkTS1.2动态import js时,使用ESValue接口动态导入模块和调用接口。 + **ArkTS1.1** ```typescript // file1.js