HarmonyOS 鸿蒙4.0 迁移到 HarmonyOS 鸿蒙Next 报错记录。
HarmonyOS 鸿蒙4.0 迁移到 HarmonyOS 鸿蒙Next 报错记录。
这个帖子主要记录4.0迁移到NEXT版本报错记录,后面我遇到就记录一下。
1.Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj-literals) <ArkTSCheck>
解决:使用显式类型代替"any", “unknown”
class Test1 { ID: string = “” }
aboutToAppear() { let obj: Test1 = { ID: ‘hello’ } console.log(‘Page25====’, obj.ID) }
解决:title: string=’’
3.Array literals must contain elements of only inferrable types (arkts-no-noninferrable-arr-literals) <ArkTSCheck>
这个错误有点类似1的错误。
解决也很简单:同样声明一个对象:
class C {
n: number = 0
s: string = ""
}
aboutToAppear(){
// let a = [{n: 1, s: "1"}, {n: 2, s : "2"}]
let a2: C[] = [{n: 1, s: "1"}, {n: 2, s : "2"}]
}
大家遇到问题,都可以在这个帖子下面提,我如果会就帮忙解答一下。
我按照群主的方式改了,在api11上面仍然有这个报错
类对象 :
export class TopBarItem { id: number = 0; name: string = “”;
constructor(id: number, name: string) { this.id = id; this.name = name; } }
声明赋值 :
import { TopBarItem } from ‘…/bean/TopBarItem’;
/**
- Data of top bar. */ export const TOP_BAR_DATA: TopBarItem[] = [ { ‘id’: 0, ‘name’: ‘全部’ }, { ‘id’: 1, ‘name’: ‘电影’ }, { ‘id’: 2, ‘name’: ‘电视剧’ }, { ‘id’: 3, ‘name’: ‘综艺’ }, { ‘id’: 4, ‘name’: ‘动漫’ } ]
声明赋值的时候,还有如下报错: ERROR: ArkTS:ERROR File: E:/filmdemo/entry/src/main/ets/common/constants/TopBarConstants.ets:13:43 Array literals must contain elements of only inferrable types (arkts-no-noninferrable-arr-literals)
你写错了,数组里面的key值不能加引号的,你看看我上面的demo。所以你这样写才行: export const TOP_BAR_DATA: TopBarItem[] = [ { id: 0, name: ‘全部’ } ]
4.Use arrow functions instead of function expressions (arkts-no-func-expressions) <ArkTSCheck>
使用箭头函数,而不是表达式。
解决:
let f = (s: string) => {
console.log(s)
}
5.Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>
这个错误终于在NEXT上修复啦,虽然TS支持这样写,但是作为一个曾经开发安卓的人来说,这种无类型的参数可以把人搞死,代码而且没有提示。太好了,这样更合理。
虽然有的人喜欢这样写,代码更简洁,但是缺少可读性,不结合上下文,完全不知道mediaQueryResult这个参数是啥。
这个解决方案:查看错误6里面的解决截图。
6."Function.apply", "Function.bind", "Function.call" are not supported (arkts-no-func-apply-bind-call) <ArkTSCheck>
接着5的错误写的:在API9可以这样使用:
portraitFunc = this.onPortrait.bind(this)
this.lin.on('change', portraitFunc)
这样可以把方法提到外面单独写。
但是API10这样写就报错了。
解决方案:使用箭头函数。
如果想把方法提出去写:可以在箭头函数里面调用,把这个callback传出去:
瞬间感觉ArkTS跟Kotlin写法差不多了,早知道这样学起来真的快啊,希望官方早点更新NEXT版本啊。我API9一刻也不想待了。
那在API10中是不是应该这样写啦 onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) { if (mediaQueryResult.matches) { // 若设备为横屏状态,更改相应的页面布局 this.color = ‘#FFD700’ this.text = ‘Landscape’ } else { this.color = ‘#DB7093’ this.text = ‘Portrait’ } }
aboutToAppear() { this.listener.on(‘change’, (callback)=>{ this.onPortrait.bind(this) }) // 当媒体属性发生变更时会触发该回调。 }
是的就这样写
不能使用bind方法。还是一样的错误。
直接this.onPortrait(callback)调用即可。
啊啊啊,原来如此!
下面这个问题该如何解决?
子组件代码如下:
直接去掉。这样写:this.handleTaskChange
非常感谢你的解答,问题已经解决!谢谢!
try catch里面的err 大家如何定义类型的
.catch((err: BusinessError) => {});
import { BusinessError } from ‘@ohos.base’;
感谢
1.
杰克,我想知道这个问题怎么解决啊,要初始化赋值,但是我不清楚具体赋什么值
2.
还有这个,这个配置关系型数据库的,说我要为显式类型,name: sttring = 'taskList.db'这样改是对的嘛,我改成这样还是报错
3.
这个,我在定义类的时候,id和content都已经说明类型了,分别是number 和 string,在定义的类里面我改过id:number = 0,content:string = ''
然后push的时候是{ id:id,content:content,state:!!state } 但是依旧报错
这个问题亦是如此
4.
这个是返回tasks数组的时候出现的错误,这些本来都是在api9 sdk3.2上可以正常使用的,但是我改为api10 sdk4.0之后就这样了,辛苦您解答一下
rbdStore这个对象可以看看是怎么定义的吗?是实体类还是什么。
是个接口,直接导入的,ctrl进去写的是interface RdbStore{ version: number; insert(table: string, values: ValuesBucket, callback: AsyncCallback<number>): void; …… }
setInterval 定时器在arkts里面类型是啥
export declare function setInterval(handler: Function | string, delay: number, …arguments: any[]): number; API10,是number类型,相当于它的一个id。你可以通过这个id来清空这个定时器。
private timerId: number = -1
aboutToAppear() { this.timerId = setInterval(() => {
}, 1000)
clearTimeout(this.timerId)
}
针对HarmonyOS 4.0迁移到HarmonyOS Next的报错记录,常见错误包括类型未明确声明、属性未初始化、泛型函数调用类型推断有限等。请确保所有对象字面量对应显式声明的类或接口,使用显式类型代替"any"、“unknown”,并在构造函数中明确赋值所有属性。此外,检查泛型函数调用的类型推断。如果问题依旧没法解决,请加我微信,我的微信是itying888。