Openharmony开发记录-从API9转API10的痛苦之路
由于业务需求更新的API前段时间写的APP需要更新到API10,记录在修改过程中发现的一系列问题
arkts-no-for-in
"for .. in" is not supported (arkts-no-for-in) <ArkTSCheck>
不支持for .. in
规则:arkts-no-for-in
级别:错误文章来源:https://www.toymoban.com/news/detail-856301.html
由于在ArkTS中,对象布局在编译时是确定的、并且不能在运行时被改变,所以不支持使用for .. in
迭代一个对象的属性。对于数组来说,可以使用常规的for
循环。
应用代码
interface Person {
[name: string]: string
}
let p: Person = {
name: 'tom',
age: '18'
};
for (let t in p) {
console.log(p[t]);
}
typescript
建议改法
let p: Record<string, string> = {
'name': 'tom',
'age': '18'
};
for (let ele of Object.entries(p)) {
console.log(ele[1]);
}
arkts-no-props-by-index
不支持通过索引访问字段
规则:arkts-no-props-by-index
级别:错误
ArkTS不支持动态声明字段,不支持动态访问字段。只能访问已在类中声明或者继承可见的字段,访问其他字段将会造成编译时错误。 使用点操作符访问字段,例如(obj.field
),不支持索引访问(obj[field]
)。 ArkTS支持通过索引访问TypedArray
(例如Int32Array
)中的元素。
可以转换成Record类型,用来访问对象的属性。
应用代码
import myRouter from '@ohos.router';
let params: Object = myRouter.getParams();
let funNum: number = params['funNum'];
let target: string = params['target'];
typescript
建议改法
import myRouter from '@ohos.router';
let params = myRouter.getParams() as Record<string, string | number>;
let funNum: number = params.funNum as number;
let target: string = params.target as string;
arkts-no-inferred-generic-params
需要显式标注泛型函数类型实参
规则:arkts-no-inferred-generic-params
级别:错误
如果可以从传递给泛型函数的参数中推断出具体类型,ArkTS允许省略泛型类型实参。否则,省略泛型类型实参会发生编译时错误。 禁止仅基于泛型函数返回类型推断泛型类型参数。
应用代码
class A {
str: string = ''
}
class B extends A {}
class C extends A {}
let arr: Array<A> = [];
let originMenusMap:Map<string, C> = new Map(arr.map(item => [item.str, (item instanceof C) ? item: null]));
typescript
建议改法
class A {
str: string = ''
}
class B extends A {}
class C extends A {}
let arr: Array<A> = [];
let originMenusMap: Map<string, C | null> = new Map<string, C | null>(arr.map<[string, C | null]>(item => [item.str, (item instanceof C) ? item: null]));
typescript
原因
(item instanceof C) ? item: null
需要声明类型为C | null
,由于编译器无法推导出map
的泛型类型参数,需要显式标注。
arkts-identifiers-as-prop-names
对象的属性名必须是合法的标识符
规则:arkts-identifiers-as-prop-names
级别:错误
在ArkTS中,对象的属性名不能为数字或字符串。通过属性名访问类的属性,通过数值索引访问数组元素。文章来源地址https://www.toymoban.com/news/detail-856301.html
应用代码
interface W {
bundleName: string
action: string
entities: string[]
}
let wantInfo: W = {
'bundleName': 'com.huawei.hmos.browser',
'action': 'ohos.want.action.viewData',
'entities': ['entity.system.browsable']
}
typescript
建议改法
interface W {
bundleName: string
action: string
entities: string[]
}
let wantInfo: W = {
bundleName: 'com.huawei.hmos.browser',
action: 'ohos.want.action.viewData',
entities: ['entity.system.browsable']
}
到了这里,关于Openharmony开发记录-从API9转API10的痛苦之路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!