前言
该问题是我在某站中的某马的鸿蒙课程中发现,折磨了我一会,希望做次文章为新手鸿蒙开发者避坑
视频链接如下
视频链接https://www.bilibili.com/video/BV1Sa4y1Z7B1?p=31
正文
在这一集中老师在EntryAbility.ets文件的onCreate钩子函数中传递了this.context
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
taskModel.initTaskDB(this.context);
}
initTaskDB(context){
//内容
}
但是在接受的时候就会报错:Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>
但是老师那边是没有报错,这就让我百思不解,既然发现问题,那么就解决问题,既然你是要一个明确的类型那么我就给你
于是我点进context的源码,看到了类型是UIAbilityContext
那我就将这个类型放到
initTaskDB(context:UIAbilityContext){
// 1.rdb配置
...
}
// 2.初始化SQL语句
....
// 3.获取rdb
relationalStore.getRdbStore(context,config,(err,rdbStore)=>{
})
}
然后getrdbStore的第一个参数就可以报错了:Argument of type 'UIAbility' is not assignable to parameter of type 'BaseContext'. <ArkTSCheck>
解决方法一:
乍眼一看,哟 原来你是想要BaseContext的类型,好说好说
然后给context的类型改为BaseContext
import { Ability, common } from '@kit.AbilityKit';
class TaskModel{
/**
* 初始化任务表
*/
initTaskDB(context:common.BaseContext){
}
注意:BaseContext不能直接给,需要导包,然后使用包名.xxxxxx
解决方法二:
点击getRdbStore的源码
relationalStore.getRdbStore(context,config,(err,rdbStore)=>{
就会发现其实给context给上Context也可以
initTaskDB(context:Context){
//内容
}
不过Context的父类是BaseContext
结束
好了,问题解决,有兴趣的也可以去看一下官方关于context文档