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)
}


更多关于HarmonyOS 鸿蒙4.0 迁移到 HarmonyOS 鸿蒙Next 报错记录。的实战教程也可以访问 https://www.itying.com/category-93-b0.html

33 回复

2.Property 'title' has no initializer and is not definitely assigned in the constructor. 
属性'title'没有初始化器,也没有在构造函数中明确赋值。

编译没有问题,但是预览报错了,一定要赋值。

更多关于HarmonyOS 鸿蒙4.0 迁移到 HarmonyOS 鸿蒙Next 报错记录。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


所以自定义组件成员变量初始化一定要赋值。哪怕赋值一个’’

解决: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) }) // 当媒体属性发生变更时会触发该回调。 }

是的就这样写

代码不得看,杰克!看看图,然后你再删掉我的评论,别乱了你的队形,总结的太棒啦cke_1541.png

不能使用bind方法。还是一样的错误。

直接this.onPortrait(callback)调用即可。

啊啊啊,原来如此!

下面这个问题该如何解决?

cke_250.png

子组件代码如下:

cke_1316.png

直接去掉。这样写:this.handleTaskChange

非常感谢你的解答,问题已经解决!谢谢!

cke_184.png

try catch里面的err 大家如何定义类型的

.catch((err: BusinessError) => {});

import { BusinessError } from ‘@ohos.base’;

1.1.png

杰克,我想知道这个问题怎么解决啊,要初始化赋值,但是我不清楚具体赋什么值

2.

2.png

还有这个,这个配置关系型数据库的,说我要为显式类型,name: sttring = 'taskList.db'这样改是对的嘛,我改成这样还是报错

3.

3.png

这个,我在定义类的时候,id和content都已经说明类型了,分别是number 和 string,在定义的类里面我改过id:number = 0,content:string = ''

然后push的时候是{ id:id,content:content,state:!!state } 但是依旧报错

4.png

这个问题亦是如此

4.5.png

这个是返回tasks数组的时候出现的错误,这些本来都是在api9 sdk3.2上可以正常使用的,但是我改为api10 sdk4.0之后就这样了,辛苦您解答一下

rbdStore这个对象可以看看是怎么定义的吗?是实体类还是什么。

是个接口,直接导入的,ctrl进去写的是interface RdbStore{ version: number; insert(table: string, values: ValuesBucket, callback: AsyncCallback<number>): void; …… }

这个接口有实现它的类吗?实现了的话可以直接new这个实体类。

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。

更多关于HarmonyOS 鸿蒙4.0 迁移到 HarmonyOS 鸿蒙Next 报错记录。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


回到顶部