- arkt-no-props-by-index
- Property ‘name’ has no initializer and is not definitely assigned in the constructor.
- arkts-no-any-unknown
typescript 中的报错 Property ‘name’ has no initializer and is not definitely assigned in the construc…
ArkTs编译常见错误汇总(更新中)
从TypeScript到ArkTS的迁移指导【坚果派】
TypeScript(三)对象类型
- Assigning the attribute ‘option’ to the ‘@ObjectLink’ decorated attribute ‘imageKnifeOption’ is not allowed.
意思就是把option变量传给@ObjectLink修饰的变量imageKnifeOption是不允许的。option是个普通的变量,不是状态变量,用@state装饰就好了
如果把组件描述的代码提取到@Builder函数中,就没有这个限制
5.
【HarmonyOS】鸿蒙应用安装三方包后,为什么每次同步更新都会将三方包更新成最新版本?
这个是因为Edit Configuration中,Deply Multi Hap中module没有勾选上appDevSearch
- 箭头函数this问题
对于普通的函数,this就是函数的接收者,也就是函数的调用方,但是箭头函数this是外部对象。
箭头函数this的指向
有遇到函数中this不对的情况,可以通过箭头函数包裹一下就对了
build() {
Column() {
SearchHomeFoundHeader({title: "搜索发现", showTopBlank: true, refreshAction: () => {this.refreshAction()}})
}
}
refreshAction() {
let currentShowCount = this.currentItemWordArr.length;
let totalCount = this.itemWordArr.length
if (currentShowCount < totalCount) {
let tmpArr = this.itemWordArr.splice(0, currentShowCount)
// 放到末尾
tmpArr.forEach(item => {
this.itemWordArr.push(item)
})
this.updateCurrentItemWordArr()
}
}
SearchHomeFoundHeader({title: “搜索发现”, showTopBlank: true, refreshAction: this.refreshAction})
这样写是不对的,上面用箭头函数包裹才正确
- 怎么给一个变量赋值对象,类似java的匿名内部类
其实和java类似,定义变量名,指定变量类型,实例化对象,只不过java中不用new关键字
private observer: Observer<string> = {
onChanged(word: string) {
this.searchInput = word
this.clickSearchFunc(word)
}
}
不过这里面的this,是匿名对象的this,不是外部对象的。那想访问外部对象的资源怎么办呢?
java中可以通过类名.this来实现,在javaScript中没有这种语法
- javascript中怎么使用外部对象呢?
如果是在一个大函数里面,使用匿名对象,可以在大函数内提前把外部对象的this存成self,这样匿名对象使用self就能访问外部对象。
直接把匿名对象赋值给变量的用法,这种场景,怎么使用外部对象呢?
答案就是使用立即执行函数包裹一下。
JavaScript 匿名函数几种执行方式[通俗易懂]
不过在鸿蒙中,得用箭头函数,会提示错误
(function(){})()
Use arrow functions instead of function expressions (arkts-no-func-expressions)
private observer: Observer<string> = ((self) => {
return {
onChanged(word: string) {
self.searchInput = word
self.clickSearchFunc(word)
}
}
})(this)
private observer: Observer<string> = (() => {
const self = this
return {
onChanged(word: string) {
self.searchInput = word
self.clickSearchFunc(word)
}
}
})()